프로세스란?
= 실행중인 프로그램
프로세스 생성 시, 발생하는 일
① 프로세스 생성 = 메모리 할당
- 프로세스가 생성(실행)되면 커널은 프로세스가 물리적 메모리에 접근 가능하도록 메모리를 할당한다.
② 커널(운영체제)은 프로세스별로 관리정보를 담고 있는 '프로세스 제어블록(PCB:Process Control Block)'을 생성한다.
- PCB의 주요 정보
프로세스 번호
(Process number)프로세스 식별 ID(PID)
부모 프로세스 식별 ID(PPID)프로그램 카운터(PC)
(Program Counter)문맥교환 발생 시 다음에 실행할 명령어의 위치값 저장 레지스터 저장 영역
(Register save area)문맥교환 발생 시 현재 프로세스의 실행상태정보(레지스터 정보) 저장 프로세스의 상태
(Process State)프로세스의 현재 상태 정보 저장
- Ready : CPU 할당 대기
- Running : CPU 할당 받음
- Blocked : 멈춤 상태
... 여긴 보안이므로 여까지메모리 정보
(Memory limits)프로세스가 사용하는 메모리(segment or page table) 정보
③ 프로세스별로 오픈한 파일을 관리하기 위한 '파일디스크립터 테이블(FDT:File Descriptor Table)'을 생성한다.
- 기본적으로 3개의 파일이 자동으로 오픈된다. (STDIN(0),STDOUT(1),STDERR(2))
- 프로세스 내에서 오픈한 파일을 식별하기 위한 양의 정수 값을 FD(File Descriptor)라고 한다.
④ 커널(운영체제)이 시스템 내에서 여러 프로세스에 의해 오픈된 파일들을 관리하기 위한 자료구조가 System open-file table이다.
- open_mode: 파일의 읽기/쓰기 모드
- offset: 파일 I/O를 수행하기 위한 현재 위치값(Position)
- reference_count: 해당 파일의 참조 개수/파일 복제가 발생하면 값이 증가한다.
⑤ Active vnode table은 해당 파일의 inode 정보를 가지고 있는 일종의 캐시 역할. 즉, 다양한 파일시스템의 inode 정보를 관리하기 위한 중계자 역할을 한다.
프로세스의 기본 요건
① 시스템 부팅을 담당하는 boot 프로세스(PID:0)를 제외한 모든 프로세스는 부모 프로세스를 가진다.
- 자식프로세스가 살아있는 데 부모가 죽으면 자식프로세스는 고아프로세스가 되며, 이 때, init 프로세스(PID:1)가 대리모가 된다.
② 프로세스 종료 시, 자신의 '종료상태정보'를 부모에게 반환(SIGCHLD)해야 정상적으로 소멸이 가능하다.
- 종료상태정보: PID, Exit Code(종료 시 반환값), CPU 사용시간 등의 정보를 말한다.
- 종료상태정보를 전달할 때, 자식프로세스는 일시적으로 좀비프로세스가 된다.
- 좀비프로세스: 프로세스가 수행을 종료했지만, 커널오류 or 종료한 자식프로세스에 대한 처리오류 등으로인하여 소멸하지 않고 남아있는 상태. kill 시그널을 통해서도 소멸하지 않아 부모 프로세스를 강제로 종료시키거나 시스템 재기동을 통해 커널 정보를 초기화 하는 방법으로 제거
- 커널 관점에서 프로세스는 무한히 생성하지 못하므로, 좀비 프로세스가 너무 많아지면 시스템 가용성에 문제 발생
③ fork() 함수 : 자식 프로세스 생성함수
- 부모 프로세스 : 생성한 자식 프로세스의 PID 반환
- 자식 프로세스 : 0 반환
프로세스 정보 확인 명령어
(Process Status)
문법 | ps [-flaAe] [-G gid_list] [-g egid_list] [-U uid_list] [-u euid_list] [-t terminal_list] | |
옵션 | -f | f형식으로 프로세스 정보 출력 |
-l | l형식으로 프로세스 정보 출력 | |
-exec 명령어 | 현재 시스템에서 동작중인 모든 프로세스 정보 출력 (every) 명시하지 않으면 현재 쉘에서 실행되어 동작중인 프로세스만 출력함 |
예문
ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10:00 ? 00:00:10 /sbin/init
root 1001 1 0 10:05 tty1 00:00:00 /usr/bin/bash
user 1010 1001 0 10:05 pts/0 00:00:01 /usr/bin/ssh
user 1011 1001 0 10:05 pts/1 00:00:00 /usr/bin/top
UID | User ID, EUID |
PID | Process ID, PID |
PPID | Parent Process ID |
STIME | Start Time, 프로세스 시작 시간('월 일' or '시:분:초') |
TTY | 프로세스와 연결된 터미널 타입
|
TIME | CPU 사용 시간(시:분:초) |
CMD | 명령어 이름 |
ps -el
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 1000 2345 1234 0 80 0 1234 456 wait tty1 00:00:02 bash
4 R 1000 2346 2345 5 80 0 5678 789 - pts/1 00:00:00 top
0 Z 1000 2347 2345 0 80 0 0000 123 zombie ? 00:00:00 my_program
F (Flags) | 프로세스의 상태 플래그. 이 값은 시스템이 프로세스의 동작 상태를 추적하는 데 사용. |
S (State) | 프로세스의 상태
|
UID | User ID, EUID |
PID | Process ID |
PPID | Parent Process ID |
C (CPU usage) | 프로세스가 사용한 CPU 자원의 비율 |
PRI (Priority) | 프로세스의 우선순위 값이 낮을수록 우선순위가 높음. 이 값은 운영 체제의 스케줄러가 프로세스를 언제 실행할지 결정하는 데 영향을 미침 |
NI (Nice value) | 프로세스의 Nice 값 프로세스의 우선순위에 영향을 미침 |
ADDR (Memory address) | 프로세스가 사용하는 메모리의 주소 시스템에 따라 출력되지 않을 수 있음 |
SZ (Size) | 프로세스가 사용하는 가상 메모리의 크기를 킬로바이트(KB) 단위로 나타냄. |
WCHAN (Waiting Channel): | 프로세스가 대기 중인 자원이나 이벤트(예: I/O 작업)
|
TTY (Terminal Type) | 프로세스가 실행된 터미널.
|
TIME (Cumulative CPU Time) | 프로세스가 사용한 총 CPU 시간 |
CMD (Command) | 실행된 명령어 |
'정보보안 > 시스템 보안' 카테고리의 다른 글
[UNIX/Linux 기본학습] 서버보안1 (0) | 2024.11.10 |
---|---|
[UNIX/Linux 기본학습] 시스템 시작과 종료 (1) | 2024.11.10 |
[UNIX/Linux 기본학습] 파일 시스템 응용 (1) | 2024.11.10 |
[UNIX/Linux 기본학습] 입출력 재지정(I/O Redirection) 기능 (0) | 2024.11.09 |
[UNIX/Linux 기본학습] 계정 정보 (0) | 2024.11.09 |