더북(TheBook)

다음으로 넘어가기 전에 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나 서버에서는 수백, 심지어는 수천 개의 프로세스를 볼 수 있다.

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