Linux 리눅스 프로세스

프로세스

프로세스(process)란 운영체제로부터 CPU, 메모리, 파일 등의 자원을 할당받고, 메모리에 적재되어 실행 준비가 되었거나 실행 중인 프로그램이다. 

PCB (Process Control Block)은 하나의 프로세스가 시스템에 존재할 때 프로세스에 대한 모든 것(아래 나오는 구성요소들)을 표현하며, 메모리에 저장된다.

 

프로세스 확인 명령어 ps

-e(-A) 모든 프로세스 출력
-f 유닉스 스타일로 출력
-a 세션 리더 제외하고 터미널에 종속되지 않은 모든 프로세스 출력
-C [process] 입력한 프로세스만 출력
-o [value] 출력 포맷 지정

a 터미널과 연관된 프로세스 출력
e 환경변수 정보 출력
f 프로세스 간 상속관계를 트리형식응로 출력
l 정보를 길게 출력
u 소유자를 기준으로 출력
x 터미널에 종속되지 않는 프로세스 출력
p 지정한 프로세스 출력

 

상태

프로세스는 단순히 코드의 집합인 프로그램과 달리 상태를 가진다.

  • 생성 (New / Created) : PCB가 만들어졌지만 아직 실행 대기열에 올라가지 않음
  • 준비 (Ready) : 실행할 준비는 되었으나 CPU를 받지 못해 대기 중
  • 실행 (Running) : CPU를 점유하여 실제 실행 중
  • 대기 (Waiting / Blocked) : I/O, 이벤트, 타이머 등 특정 작업 완료를 기다리는 중
  • 종료 (Terminated / Exit) : 실행 완료 또는 오류로 종료됨 (Zombie 상태가 잠시 존재)

프로세스 상태 전이

[ 생성 ]
   │
   ▼
[ 준비 ] ──(스케줄러 할당)──▶ [ 실행 ]
   ▲                            │
   │                            │ (I/O 요청, sleep, wait)
   │                            ▼
   └──────(타임슬라이스 만료)── [ 대기 ]
                                   │
                                   │ (I/O 완료, 이벤트 발생)
                                   ▼
                                [ 준비 ]
                                      │
                                      │ (exit, abort)
                                      ▼
                                   [ 종료 ]

 

  1. 생성 -> 준비 : fork(), exec() 후 PCB 생성 / 메모리, 파일 디스크립터 준비 완료 후 Ready 큐 삽입
  2. 준비 -> 실행 : CPU 스케줄러가 Ready 큐에서 하나 선택 / Dispatch 되면서 Running 상태로 이동
  3. 실행 -> 준비 : 타임 슬라이스 만료, 선점 발생 / 우선순위 높은 프로세스 등장 시도 등..
  4. 실행 -> 대기 : I/O 요청 / sleep(), read(), mutex lock 등 블로킹 호출
  5. 대기 -> 준비 : I/O 완료 인터럽트 / semaphore, event, timer 만료
  6. 실행 -> 종료 : exit() 호출 / main 함수 종료, 치명적 시그널 수신했을 때 

*fork() : 현재 프로세스를 그대로 복제해 자식 프로세스를 만드는 시스템콜
*exec() : 현재 프로세스를 완전히 다른 프로그램으로 덮어씀(PID 유지)
*파일 디스크립터 : 열린 파일, 소켓, 파이프를 가리키는 번호
*Dispatch디스패치 : 스케줄러가 준비 상태 프로세스를 CPU에 실제로 올리는 행위
*I/O : 입출력 작업 (느린)
*sleep() : 일정 시간 동안 스스로 대기 상태로 들어감
*mutex lock : 한 번에 하나의 스레드만 임계영역 접근 허용
*semaphore : 동시에 접근 가능한 개수를 제한하는 동기화 도구 (mutex lock과 달리 여러 개 가능)

구성

항목 의미
UID 소유자 이름
PID 고유 식별자
PPID 부모 프로세스의 고유 식별자
C 프로세서 사용률 (%)
STIME 프로세스가 시작한 시간
TTY 터미널의 종류
TIME 총 CPU 사용시간
CMD 프로세스 실행 시 명령줄

 

항목 의미
USER 소유자 이름
MEM 메모리 점유율
VSZ, RSS 실제 메모리 사용량
STAT 현재 상태
STARTED 시작 시간

 

프로세스 종류

foreground

사용자와 직접 상호작용하며 화면에 나타나는 프로세스이다.

터미널이나 화면을 점유해 실행되는 동안 사용자가 다른 명령을 입력할  수 없다. (ex : vi, 웹브라우저, 게임..)

실행 중인 포그라운드 프로세스를 중단하려면 ctrl+c 입력

 

backgroud

사용자와의 상호작용 없이 뒤에서 실행되는 프로세스이다.

화면에 나타나지 않으며 프로세스가 실행되는 동안에도 다른 작업을 할 수 있다. (ex : 바이러스 백신 검사, 백업, 로깅..)

명령어 뒤에 & 기호를 붙여 실행한다. jobs 명령어로 목록 확인, fg 명령어로 포그라운드로 전환할 수 있다.