공든탑앱 열기

프로세스의 개념과 유형

리눅스마스터 2급 · 프로세스 관리 · 약 10분

쉽게 말하면

디스크에 저장된 프로그램을 실행하면, 메모리에 올라와 '지금 일하는 중'인 상태가 돼요. 이것이 프로세스예요. 프로세스마다 번호(PID)가 있고, 자기를 실행한 부모가 있어요. 요리책(프로그램)과 그 책을 보고 요리 중인 요리사(프로세스)의 차이예요.

시험용 정의

프로그램은 디스크에 있는 실행 파일이고, 그것이 메모리에 올라 실행 중인 상태가 프로세스다. 각 프로세스는 고유 번호 PID와 부모 번호 PPID를 가지며, 모든 프로세스의 조상은 PID 1(systemd 또는 init)이다.

비유로 이해하기

프로그램은 요리책, 프로세스는 그 책을 보고 지금 요리하는 중인 요리사다. 같은 요리책으로 요리사 여러 명(프로세스)이 동시에 일할 수 있다.

자세히

그림으로 보기: 프로세스 상태

  1. 생성fork 로 만들어짐
  2. 준비(Ready)CPU 를 기다림
  3. 실행(Running)CPU 를 받음(디스패치), 시간이 끝나면 준비로
  4. 대기(Waiting)입출력을 기다림, 끝나면 준비로
  5. 종료부모가 거두지 않으면 좀비(Z)
ps 의 STAT: R 실행, S 대기(잠), T 정지, Z 좀비

프로세스의 종류

포그라운드터미널을 차지하고 실행, 끝날 때까지 다른 명령 불가
백그라운드명령 뒤 &. 터미널을 쓰면서 뒤에서 실행
데몬터미널 없이 계속 떠서 서비스 제공 (sshd, httpd, crond)
좀비 (Z)종료됐지만 부모가 종료 상태를 거두지(wait) 않아 목록에 남음. 이미 죽은 상태라 kill -9도 소용없고, 부모가 거두거나 부모를 끝내야(그러면 PID 1이 거둠) 사라진다
고아부모가 먼저 종료. PID 1이 새 부모가 되어 거둬 준다

생성 방식 fork와 exec

fork: 부모가 자신을 복제해 새 PID의 자식을 만든다. exec: 현재 프로세스를 다른 프로그램으로 교체한다(PID 유지). 셸에서 ls를 치면 셸이 fork → 자식이 exec(ls). exec ls를 직접 치면 셸 자체가 ls로 바뀌어 끝나면 로그아웃된다.

데몬을 띄우는 두 방식: standalone과 inetd

standalone(단독형)inetd·xinetd(슈퍼 데몬 방식)
동작데몬이 항상 메모리에 떠서 요청을 기다림슈퍼 데몬(inetd, xinetd) 하나만 떠 있다가 요청이 오면 해당 서비스를 그때 실행
응답 속도빠름요청마다 실행하므로 느림
메모리많이 씀적게 씀(자원 효율적)
어울리는 서비스요청이 잦은 서비스(웹 httpd, 메일 sendmail, DB)가끔 쓰는 서비스(telnet, 옛 ftp)
최근대부분의 서비스systemd의 소켓 활성화가 비슷한 역할

PID 1의 변천

예전 배포판(CentOS 6 등)은 init, CentOS 7 이후는 systemd가 PID 1이다. 부팅할 때 커널이 가장 먼저 실행하는 초기화 프로세스로, 이후 모든 서비스를 띄운다.

/proc에서 보기

각 프로세스는 /proc/PID/ 디렉터리로 보인다(cmdline, status, fd 등). ps·top도 여기서 정보를 읽는다.

시험에 이렇게 나와요

확인 문제

Q1. 부모 프로세스가 자식의 종료 상태를 거둬 가지 않아, 이미 끝났는데도 프로세스 목록에 <defunct>로 남아 있는 프로세스를 무엇이라 할까?

  1. 대기 프로세스
  2. 고아 프로세스
  3. 데몬 프로세스
  4. 좀비 프로세스
정답 보기

4번 좀비 프로세스

실행은 끝났지만 부모가 wait로 종료 상태를 받아 가지 않아 목록에만 남은 것이 좀비(Z)다. 반대로 부모가 먼저 죽어 PID 1(systemd)이 새 부모가 된 것은 고아 프로세스다.

Q2. 웹 서버처럼 요청이 잦은 서비스를 항상 메모리에 띄워 두고 요청을 기다리게 하는 실행 방식은?

  1. standalone 방식
  2. inetd 방식
  3. cron 방식
  4. nohup 방식
정답 보기

1번 standalone 방식

standalone(단독형). 빠르지만 메모리를 계속 쓴다.

Q3. inetd 방식에 대한 설명으로 옳은 것은?

  1. 슈퍼 데몬이 요청이 올 때 해당 서비스를 실행해 메모리를 아낀다
  2. 모든 서비스가 항상 메모리에 떠 있다
  3. standalone보다 응답이 항상 빠르다
  4. 웹 서버에 가장 적합하다
정답 보기

1번 슈퍼 데몬이 요청이 올 때 해당 서비스를 실행해 메모리를 아낀다

요청 시 실행 → 메모리 효율, 대신 느림.

Q4. 모든 프로세스의 조상으로 PID가 1인 프로세스는?

  1. kernel
  2. sshd
  3. bash
  4. systemd(init)
정답 보기

4번 systemd(init)

PID 1 = systemd (예전엔 init).

Q5. 현재 프로세스를 복제해 새 자식 프로세스를 만드는 것은?

  1. wait
  2. fork
  3. exec
  4. nohup
정답 보기

2번 fork

fork. exec는 다른 프로그램으로 교체.

Q6. 터미널과 관계없이 백그라운드에서 계속 실행되며 서비스를 제공하는 프로세스는?

  1. 좀비
  2. 고아
  3. 데몬
  4. 작업(job)
정답 보기

3번 데몬

데몬이다. 터미널 없이 뒤에서 계속 돌며 서비스(웹·메일 등)를 제공한다. 이름 끝에 d가 붙는 경우가 많다(httpd, sshd).

헷갈리기 쉬운 O·X

exec로 명령을 실행하면 새 PID를 가진 자식 프로세스가 생긴다.

정답 보기

X exec는 현재 프로세스를 교체한다(PID 그대로). 새 프로세스는 fork.

부모 프로세스가 먼저 종료된 자식은 PID 1이 새 부모가 된다.

정답 보기

O 고아 프로세스.

좀비 프로세스는 kill -9로 바로 없앨 수 있다.

정답 보기

X 이미 죽은 상태라 신호가 소용없다. 부모가 거두거나 부모를 종료해야 한다.

함께 보면 좋은 개념