다음으로 넘어가기 전에 ps를 간략히 살펴보자. 앞에서 본 것처럼 ps는 실행 중인 프로세스들에 대한 정보를 보여준다. 시스템 계획을 세우거나 이상 작동에 대한 문제를 해결할 때 프로세스에 관련된 정보가 큰 도움이 될 때가 종종 있다. ps를 초기에 자주 사용하면 좋다.
앞에서 했던 것처럼 ps 명령에 -e 플래그를 추가하면 현재 셸이 실행한 프로세스뿐만 아니라 init 이후의 모든 부모 셸에서 실행된 프로세스를 모두 보여준다.
Note
부모 셸(parent shell)은 자식 셸을 실행하고 이 셸로 프로그램을 실행할 수 있는 셸 환경이다. 예를 들어, GUI 데스크톱 세션을 하나의 셸로, 여기에서 실행한 터미널을 자식으로 생각할 수 있다. 최상위 셸은 리눅스가 부팅될 때 실행되는 셸이다.
텍스트 환경에서 부모와 자식 셸/프로세스를 시각화해서 보려면 pstree 명령을 사용하면 된다(-p 플래그를 지정하면 각 프로세스의 PID도 볼 수 있다). PID 1이 할당된 첫 번째 프로세스가 systemd임에 주목하자. 이전 버전의 리눅스(우분투 14.04 이전 버전)에서는 init 프로세스의 PID가 1이다.
$ pstree -p ← CentOS에서 pstree를 실행하려면 psmisc 패키지를 설치해야 할 수도 있다 systemd(1)─┬─agetty(264) ← 최상위 부모 프로세스인 systemd ├─agetty(266) ├─agetty(267) ├─agetty(268) ├─agetty(269) ├─apache2(320)─┬─apache2(351) │ ├─apache2(352) │ ├─apache2(353) │ ├─apache2(354) │ └─apache2(355) ├─cron(118) ├─dbus-daemon(109) ├─dhclient(204) ├─dockerd(236)─┬─docker-containe(390)─┬─{docker-containe}(392) │ │ └─{docker-containe}(404) │ ├─{dockerd}(306) │ └─{dockerd}(409) ├─mysqld(280)─┬─{mysqld}(325) │ ├─{mysqld}(326) │ └─{mysqld}(399) ├─nmbd(294) ├─rsyslogd(116)─┬─{in:imklog}(166) │ ├─{in:imuxsock}(165) │ └─{rs:main Q:Reg}(167) ├─smbd(174)─┬─smbd(203) │ └─smbd(313) ├─sshd(239)───sshd(840)───sshd(849)───bash(850)──pstree(15328) ├─systemd-journal(42) ├─systemd-logind(108) [...]
이 명령들을 여러분 컴퓨터에서 직접 실행해보기 바란다. 아주 조용한 시스템에서도 이런 프로세스 수십 개를 볼 수 있고, 분주한 데스크톱 PC나 서버에서는 수백, 심지어는 수천 개의 프로세스를 볼 수 있다.