강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

프로세스들의 가계도를 확인하는 pstree 활용법

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

프로세스들의 가계도를 확인하는 pstree 활용법

 

 

 

 

pstree는 현재 실행중인 프로세스들을 트리구조로 보여준다.

 

 

 

 프로세스의 상호관계를 파악하기 위해 필수적인 명령어이다.

 

 

 

 모든 프로세스의 부모프로세스라고 하는 PID 1init프로세스로부터 개별프로세스들이 어떤 관계로 실행이 되었는가를 파악하기 위해 사용한다.

 

 

 

 

 

간단한 예부터 보도록하자. 다음과 같이 간단히 pstree라고만 하면 현재 실행중인 프로세스들을 tree구조형태로 보여준다.

 

 

 

 

 

[root@sulinux ~]#pstree

init-+-acpid

     |-auditd-+-audispd---{audispd}

     |        `-{auditd}

     |-automount---4*[{automount}]

     |-avahi-daemon---avahi-daemon

     |-crond

     |-ksoftirqd/0

     |-ksoftirqd/1

     |-kthread-+-aio/0

     |         |-aio/1

     |         |-ata/0

     |         |-ata/1

     |         |-ata_aux

     |         |-cqueue/0

     |         |-cqueue/1

     |         |-kacpid

     |         |-kauditd

     |         |-kblockd/0

     |         |-kblockd/1

     |         |-kgameportd

     |         |-khubd

     |         |-3*[kjournald]

     |         |-kmpathd/0

     |         |-kmpathd/1

     |         |-kpsmoused

     |         |-kseriod

     |         |-kswapd0

     |         |-2*[pdflush]

     |         `-scsi_eh_0

     |-migration/0

     |-migration/1

     |-6*[mingetty]

     |-ntpd

     |-sshd---sshd---bash---pstree

     |-syslogd

     |-udevd

     |-watchdog/0

     |-watchdog/1

     |-xfs

     |-xinetd

     `-yum-updatesd

[root@sulinux ~]#

 

 

 

 

위의 예가 pstree를 사용하는 가장 간단한 예이다.

 

 

 

 이번에는 다음 예를 보도록하자. pstree에서 -a옵션을 사용하면 프로세스들이 실행이 될 때의 인자나 옵션들을 모두 함께 표시해 준다.

 

 

 

  , 아래의 예를 보면 각 프로세스들이 실행이 될 때 사용하였던 옵션들까지 상세하게 보여주고 있다.

 

 

 

 

 

[root@sulinux ~]#pstree -a

init                                    

  |-acpid

  |-auditd

  |   |-audispd

  |   |   `-{audispd}

  |   `-{auditd}

  |-automount

  |   |-{automount}

  |   |-{automount}

  |   |-{automount}

  |   `-{automount}

  |-avahi-daemon

  |   `-avahi-daemon

  |-crond

  |-klogd -x

  |-(ksoftirqd/0)

  |-(ksoftirqd/1)

  |-(kthread)

  |   |-(aio/0)

  |   |-(aio/1)

  |   |-(ata/0)

  |   |-(ata/1)

  |   |-(ata_aux)

  |   |-(cqueue/0)

  |   |-(cqueue/1)

  |   |-(kacpid)

  |   |-(kauditd)

  |   |-(kblockd/0)

  |   |-(kblockd/1)

  |   |-(kgameportd)

  |   |-(khubd)

  |   |-(kjournald)

  |   |-(kjournald)

  |   |-(kjournald)

  |   |-(kmpathd/0)

  |   |-(kmpathd/1)

  |   |-(kpsmoused)

  |   |-(kseriod)

  |   |-(kswapd0)

  |   |-(pdflush)

  |   |-(pdflush)

  |   `-(scsi_eh_0)

  |-(migration/0)

  |-(migration/1)

  |-mingetty tty1

  |-mingetty tty2

  |-mingetty tty3

  |-mingetty tty4

  |-mingetty tty5

  |-mingetty tty6

  |-ntpd -u ntp:ntp -p /var/run/ntpd.pid -g

  |-sshd

  |   `-sshd

  |       `-bash

  |           `-pstree -a

  |-syslogd -m 0

  |-udevd -d

  |-(watchdog/0)

  |-(watchdog/1)

  |-xfs -droppriv -daemon

  |-xinetd -stayalive -pidfile /var/run/xinetd.pid

  `-yum-updatesd -tt /usr/sbin/yum-updatesd

[root@sulinux ~]#

 

 

 

 

특히 위의 결과에서 gpm vsftpd라는 프로세스를 보면 프로세스가 실행되면서 사용되었던 옵션들까지 함께 표시되었음을 확인할 수 있다.

 

 

 

 

 

다음에는 현재 프로세스와 그의 조상프로세스를 강조하여 그 결과를 보여주는 pstree의 예이다.

 

 

 

 pstree명령어에서 -h 옵션은 현재 프로세스와 그의 부모프로세스들을 강조하여 출력해 준다.

 

 

 

 아래 결과를 보면 각 프로세스의 부모프로세스를 강조하여 표시하고 있다.

 

 

 

 

 

[root@sulinux ~]#pstree -h

init-+-acpid

     |-auditd-+-audispd---{audispd}

     |        `-{auditd}

     |-automount---4*[{automount}]

     |-avahi-daemon---avahi-daemon

     |-crond

     |-klogd

     |-ksoftirqd/0

     |-ksoftirqd/1

     |-kthread-+-aio/0

     |         |-aio/1

     |         |-ata/0

     |         |-ata/1

     |         |-ata_aux

     |         |-cqueue/0

     |         |-cqueue/1

     |         |-kacpid

     |         |-kauditd

     |         |-kblockd/0

     |         |-kblockd/1

     |         |-kgameportd

     |         |-khubd

     |         |-3*[kjournald]

     |         |-kmpathd/0

     |         |-kmpathd/1

     |         |-kpsmoused

     |         |-kseriod

     |         |-kswapd0

     |         |-2*[pdflush]

     |         `-scsi_eh_0

     |-migration/0

     |-migration/1

     |-6*[mingetty]

     |-ntpd

     |-sshd---sshd---bash---pstree

     |-syslogd

     |-udevd

     |-watchdog/0

     |-watchdog/1

     |-xfs

     |-xinetd

     `-yum-updatesd

[root@sulinux ~]# 

 

 

 

 

위의 결과를 보면 sshd---sshd---bash---pstree가 강조되어 있음을 확인할 수 있다.

 

 

 

 즉 현재 프로세스인 pstree와 그의 조상프로세스를 강조하여 표시하고 있는 것이다.

 

 

 

 

 

이번에는 각 프로세스들의 PID를 함께 표시하는 pstree의 예이다.

 

 

 

 시스템에서 실행된 모든 프로세스들은 PID라는 것을 가지고있다.

 

 

 

 따라서 현재 실행중인 프로세스를 tree구조로 보여주는 것이므로 결과로 출력되는 모든 프로세스들의 PID와 함께 출력하는 방법이 있다.

 

 

 

 

 

pstree명령어에서 사용할 수 있는 -p옵션은 프로세스들의 오른쪽 괄호에 PID정보를 함께 출력해 준다.

 

 

 

 

 

[root@sulinux ~]#pstree -p

init(1)-+-acpid(2063)

        |-auditd(1968)-+-audispd(1970)---{audispd}(1971)

        |              `-{auditd}(1969)

        |-automount(2041)-+-{automount}(2042)

        |                 |-{automount}(2043)

        |                 |-{automount}(2046)

        |                 `-{automount}(2049)

        |-avahi-daemon(2231)---avahi-daemon(2232)

        |-crond(2165)

        |-klogd(1991)

        |-ksoftirqd/0(3)

        |-ksoftirqd/1(6)

        |-kthread(11)-+-aio/0(156)

        |             |-aio/1(157)

        |             |-ata/0(359)

        |             |-ata/1(360)

        |             |-ata_aux(361)

        |             |-cqueue/0(79)

        |             |-cqueue/1(80)

        |             |-kacpid(17)

        |             |-kauditd(392)

        |             |-kblockd/0(15)

        |             |-kblockd/1(16)

        |             |-kgameportd(1176)

        |             |-khubd(83)

        |             |-kjournald(365)

        |             |-kjournald(1460)

        |             |-kjournald(1462)

        |             |-kmpathd/0(1427)

        |             |-kmpathd/1(1428)

        |             |-kpsmoused(312)

        |             |-kseriod(85)

        |             |-kswapd0(155)

        |             |-pdflush(153)

        |             |-pdflush(154)

        |             `-scsi_eh_0(355)

        |-migration/0(2)

        |-migration/1(5)

        |-mingetty(2398)

        |-mingetty(2399)

        |-mingetty(2400)

        |-mingetty(2401)

        |-mingetty(2404)

        |-mingetty(2405)

        |-ntpd(2151)

        |-sshd(2095)---sshd(2461)---bash(2463)---pstree(2501)

        |-syslogd(1988)

        |-udevd(424)

        |-watchdog/0(4)

        |-watchdog/1(7)

        |-xfs(2203)

        |-xinetd(2132)

        `-yum-updatesd(2290)

[root@sulinux ~]#

 

 

 

 

위의 결과를 보면 결과로 출력되는 모든 프로세스들의 오른쪽 괄호에 각 프로세스들의 PID가 표시되어 있음을 알 수 있다.

 

 

 

 

 

그리고 이번에는 프로세스의 이름으로 정렬하여 pstree의 결과를 출력하는 예이다.

 

 

 

 기본적으로 pstree는 프로세스이름으로 정렬해서 보여준다.

 

 

 

  하지만 -n옵션은 같은 부모프로세스들을 가진 자식프로세스들끼리 정렬하여 보여준다.

 

 

 

 

 

[root@sulinux ~]#pstree -n

init-+-migration/0

     |-ksoftirqd/0

     |-kthread-+-kblockd/0

     |         |-kblockd/1

     |         |-kacpid

     |         |-cqueue/0

     |         |-cqueue/1

     |         |-khubd

     |         |-kseriod

     |         |-2*[pdflush]

     |         |-kswapd0

     |         |-aio/0

     |         |-aio/1

     |         |-kpsmoused

     |         |-scsi_eh_0

     |         |-ata/0

     |         |-ata/1

     |         |-ata_aux

     |         |-3*[kjournald]

     |         |-kauditd

     |         |-kgameportd

     |         |-kmpathd/0

     |         `-kmpathd/1

     |-syslogd

     |-klogd

     |-irqbalance

     |-dbus-daemon

     |-automount---4*[{automount}]

     |-acpid

     |-sshd---sshd---bash---pstree

     |-xinetd

     |-ntpd

     |-crond

     |-xfs

     |-avahi-daemon---avahi-daemon

     |-hald---hald-runner-+-hald-addon-acpi

     |                    |-hald-addon-keyb

     |                    `-hald-addon-stor

     |-yum-updatesd

     |-gam_server

     `-6*[mingetty]

[root@sulinux ~]#

 

 

 

 

이번에는 pstree의 결과를 긴 출력문이 있더라도 그대로 출력하는 예를보자. 일반적으로 pstree의 결과는 각 프로세스들의 출력길이에 제한이 있다.

 

 

 

  하지만 프로세스는 다른 프로세스를 불러들여(fork)서 자식프로세스(child process)를 생성하는 것이 너무나 빈번하다.

 

 

 

 

 

따라서 pstree의 결과에서 이와 같은 부모프로세스와 자식프로세스의 관계를 모두 표시해주는 방법이 있다.

 

 

 

 , pstree 사용시 -l옵션을 사용하시면 이런 관계를 정확하게 확인할 수 있다.

 

 

 

 다음 예는 이에 대한 결과를 표시하고 있다.

 

 

 

 

 

[root@sulinux ~]#pstree -l

init-+-NetworkManager

     |-acpid

     |-atd

     |-auditd-+-audispd---{audispd}

     |        `-{auditd}

     |-avahi-daemon---avahi-daemon

     |-bluetoothd

     |-console-kit-dae---62*[{console-kit-dae}]

     |-crond

     |-cupsd

     |-dbus-daemon---{dbus-daemon}

     |-gpm

     |-hald---hald-runner-+-hald-addon-acpi

     |                    |-hald-addon-inpu

     |                    `-2*[hald-addon-stor]

     |-httpd---8*[httpd]

     |-kerneloops

     |-6*[mingetty]

     |-nm-system-setti

     |-pcscd---{pcscd}

     |-rpc.idmapd

     |-rpc.statd

     |-rpcbind

     |-rsyslogd---3*[{rsyslogd}]

     |-2*[sendmail]

     |-setroubleshootd---2*[{setroubleshootd}]

     |-sshd-+-sshd---bash---3*[tar---gzip]

     |      `-sshd---bash---pstree

     |-udevd

     |-vsftpd

     `-wpa_supplicant

[root@sulinux ~]#

 

위의 결과로 표시된 프로세스들 가운데 sshd라는 프로세스를 보면 그 자식프로세스들을 모두 표시하고있다는 것을 확인할 수 있다.

 

 

 

 이와 같이 부모프로세스와 자식프로세스의 관계를 확인하는 방법으로 사용하기 바란다.

 

 

 

 하지만 pstree에서 -l옵션은 디폴트(default)옵션이므로 기본적으로 이 모드로 출력된다.

 

 

 

 

 

 

자 이번에는 특정 소유자의 프로세스들만을 확인하는 예를 보도록하자. pstree명령어를 이용하여 특정사용자가 실행한 프로세스들을 트리(tree)구조로 확인하는 예를 보도록하겠다.

 

 

 

 pstree명령어 실행시 계정사용자명을 지정하면 지정한 사용자소유의 모든 프로세스들을 tree구조로 나타낸다.

 

 

 

 이 방법은 특정사용자 소유의 프로세스만을 확인하고자 할 때에 매우 유용하게 사용할 수 있는 방법으로서 실무적인 활용가치가 매우 높다고 할 수 있다.

 

 

 

 

 

즉 특정사용자 소유의 모든 프로세스를 트리구조로 확인하고자 한다면 다음과 같은 형식을 사용하면 된다.

 

 

 

 아래의 예는 nobody라는 사용자소유의 모든 프로세스를 확인한 예이다.

 

 

 

 , apache소유로 실행되어 있는 프로세스는 httpd(웹데몬)이 있다는 것을 쉽게 확인할 수 있다.

 

 

 

 

 

[root@sulinux ~]# pstree -u apache

httpd

httpd

httpd

httpd

httpd

httpd

httpd

httpd

[root@sulinux ~]#

 

 

 

 

그리고 다음과 같이 -u옵션과 함께 -p옵션을 함께 사용하면 다음과 같은 결과를 확인할 수 있다.

 

 

 

 즉 아래의 예는 특정사용자의 소유로 실행된 프로세스들에 대한 PID를 함께 확인하고자 할 때에 사용하는 방법이다.

 

 

 

 

 

[root@sulinux ~]# pstree -up apache

httpd(3183)

httpd(3184)

httpd(3185)

httpd(3186)

httpd(3187)

httpd(3188)

httpd(3189)

httpd(3190)

[root@sulinux ~]#

 

 

 

 

그리고 이번에는 root소유의 모든 프로세스를 확인한 예로서 각 프로세스들의 PID와 함께 확인하기 위하여 -p옵션을 함께 사용한 것이다.

 

 

 

  , 현재 시스템에 실행되어있는 거의 모든 프로세스들은 root소유로 실행되어 있다는 것을 알 수 있으며 각 프로세스들 PID도 함께 확인할 수 있다.

 

 

 

 

 

[root@sulinux ~]# pstree -up root

init(1)-+-NetworkManager(1743)

        |-acpid(1558)

        |-atd(1903)

        |-auditd(1438)-+-audispd(1440)---{audispd}(1441)

        |              `-{auditd}(1439)

        |-avahi-daemon(1934,avahi)---avahi-daemon(1935)

        |-bluetoothd(1783)

|-crond(1877)

        |-cupsd(1944)

        |-dbus-daemon(1534,dbus)---{dbus-daemon}(1535)

        |-gpm(1866)

|-httpd(3181)-+-httpd(3183,apache)

        |             |-httpd(3184,apache)

        |             |-httpd(3185,apache)

        |             |-httpd(3186,apache)

        |             |-httpd(3187,apache)

        |             |-httpd(3188,apache)

        |             |-httpd(3189,apache)

        |             `-httpd(3190,apache)

        |-kerneloops(1886)

        |-mingetty(1953)

        |-mingetty(1954)

        |-mingetty(1956)

        |-mingetty(1958)

        |-mingetty(1960)

        |-mingetty(1962)

        |-nm-system-setti(1751)

        |-pcscd(1705)---{pcscd}(1740)

        |-rpc.idmapd(1521)

        |-rpc.statd(1485,rpcuser)

        |-rpcbind(1472,rpc)

        |-rsyslogd(1454)-+-{rsyslogd}(1456)

        |                `-{rsyslogd}(1457)

        |-sendmail(1847)

        |-sendmail(1856,smmsp)

        |-setroubleshootd(1775)-+-{setroubleshootd}(1989)

        |                       `-{setroubleshootd}(1990)

        |-sshd(1824)-+-sshd(2919)---bash(2924)

        |            `-sshd(3003)---bash(3007)---pstree(3331)

        |-udevd(580)

        |-vsftpd(3164)

        `-wpa_supplicant(1748)

[root@sulinux ~]#

 

 

 

 

이와 같이 pstree명령어 사용시 특정사용자를 지정하면 그 사용자 소유의 모든 프로세스를 확인할 수 있다.

 

 

 

 pstree명령어에서 실무적인 활용가치가 높은 방법이므로 꼭 기억하여 필요할 때에 활용하기 바란다.

 

 

 

 

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,037 명
  • 현재 강좌수 :  35,807 개
  • 현재 접속자 :  154 명