더북(TheBook)

일반적으로 ps 명령만 실행하면 프로세스가 두 개만 보인다. 첫 번째는 현재 셸 세션에서 사용하는 bash 명령 인터프리터의 프로세스고, 두 번째는 가장 최근에 실행한 명령(ps 명령)의 프로세스다. 그런데 Bash에 할당된 PID(다음 예에서는 7447)를 보면 이 시스템에는 이미 열심히 돌고 있는 프로세스가 아주 많음을 알 수 있다. 이 프로세스들은 모두 부모 셸 프로세스가 만든 프로세스들이며, 부모들을 쫓아가다 보면 결국 init 프로세스에 도달한다.

$ ps
 PID  TTY          TIME  CMD
7447  pts/3    00:00:00  bash
8041  pts/3    00:00:00  ps

우분투 컴퓨터에서 리눅스가 부팅할 때 가장 먼저 깨어 다른 프로세스들을 실행하는 프로세스가 init라는 프로세스다. 이 이름은 오해의 소지가 있어서 CentOS에서는 다른 이름을 사용한다. ps 명령에 다음과 같은 플래그를 추가해 실행하면 init이 가장 먼저 실행됨을 알 수 있다. 자세한 내용은 뒤에서 설명한다.

$ ps -ef | grep init
root         1     0  0 12:36 ?        00:00:00 /sbin/init ← 프로세스 1에 대응되는 실행 파일
ubuntu    1406   904  0 16:26 pts/4    00:00:00 grep --color=auto init 

출력 메시지의 오른쪽 끝 열(첫 번째 줄에서 /sbin/init)에는 프로세스를 만든 실행 파일의 위치와 이름이 나오는데, 여기에서는 sbin 디렉터리에 있는 init이라는 파일이다. 첫 번째 줄의 왼쪽 끝에는 나오는 root는 이 프로세스의 소유자가 루트 사용자임을 알려준다. 흥미로운 부분은 숫자 1인데, 이는 init 프로세스의 PID가 1임을 알려준다. PID 1을 받을 수 있는 유일한 방법은 다른 프로세스들보다 먼저 실행되는 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.