프로세스
프로세스 정의
- 커널에 등록되어 관리를 받는 실행 중인 프로그램
- 커널은 프로세스 관리 블록(PCB)에 프로세스에 관한 정보를 저장
- 프로세스는 시스템 자원을 사용하며 여러 상태 변화를 겪음
- 각 프로세스는 유일한 PID를 가짐
- 프로세스 예
- systemd 프로세스는 PID가 1
- 로그인을 하거나 터미널 창을 열면 ‘bash 프로세스’가 할당됨
- 필요에 따라 프로세스는 자식 프로세스를 생성함
- 데몬 프로세스는 서비스 요청을 처리하기 위한 백그라운드 프로세스
프로세스 관리 블록 (PCB)
- 커널에 등록된 각 프로세스에 대한 정보를 저장하는 영역
- 프로세스들은 모두 커널 공간에 자신의 정보를 가짐
- PCB에 저장되는 정보
- PID와 PPID
- UID와 EUID 및 GID와 EGID
- 프로세스의 현재 상태
- 실행/준비/보류/지연 등의 상태 정보와 CPU 사용 시간 등
- 프로세스 우선순위
- 프로세스가 사용 중인 자원에 관한 정보
- 모든 대기 중인 시그널의 목록
- 문맥 교환 정보
명령의 실행과 프로세스의 생성
- 셸에서 명령을 실행하면 새로운 프로세스가 만들어져 처리됨
- 시스템 호출 fork()를 호출하여 기존 부모 프로세스가 자신의 복사본 자식 프로세스를 만듦
- 자식 프로세스는 시스템 호출 exec(program)에 의해 새로운 프로그램으로 대체되어 실행됨
- 프로그램이 종료되면 자식 프로세스가 종료됨
- 부모 프로세스는 보류 상태에 있다가 자식 프로세스가 종료되면서 깨어남
- 예
- 터미날 창에서 ls 명령을 실행하면
- 셸은 fork()를 호출하여 셸의 복사본(자식 프로세스)를 생성함
- 자식 프로세스는 exec(ls)를 호출하여 ls 명령을 실행함
- pstree 명령은 프로세스 트리(부모-자식 관계)를 보여주는 명령
포어그라운드(foreground) 프로세스
- 셸 프롬프트에서 명령을 실행하면 포어그라운드 모드로 수행됨
- 포어그라운드 프로세스는 터미날에 대한 제어권을 가짐
- 포어그라운드 프로세스는 키보드 입력 및 화면 출력이 가능함
- 터미날로부터 키보드 입력을 받을 수 있는 프로세스는 하나 뿐임
- 포어그라운드 프로세스가 끝나기 전에는 다른 명령을 수행할 수 없음
- 포어그라운드로 실행 중인 프로세스를 강제 중지하려면 ctrl+c
- 포어그라운드로 실행 중에 ctrl+z하면 백그라운드로 전환되며 멈춤(또는 지연) 상태가 됨
- fg jobld 또는 bg jobld 명령을 수행하면 실행상태가 됨
백그라운드(background) 프로세스
- 백그라운드로 실행하려면 셸 프롬프트에서 명령의 끝에 &를 추가하여 실행함
- 백그라운드로 프로세스를 실행시키면 셸은 즉시 명령 대기 상태가 됨
- 백그라운드 프로세스는 터미날 출력은 가능하나 키보드 입력을 받을 수는 없음
- 백그라운드 프로세스가 키보드 입력이 필요하면 지연 상태가 됨
- 입력 없이 장시간 실행되어야 하는 경우 주로 사용
- 터미날 창을 종료하면 연결된 모든 백그라운드 프로세스도 종료됨
- 백그라운드 프로세스를 포어그라운드로 전환하는 방법
- jobs 명령으로 백그라운드 프로세스의 상태를 점검할 수 있음