검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 프로그램과 명령어/관리와 유지보수
참조 원문 : 10 basic examples of Linux ps command

  ps 명령어는 시스템에서 실행 중인 프로세스를 보는 가장 기본적인 명령어 중 하나입니다. 유저 id, CPU 사용률, 메모리 사용률, 명령어 이름 등의 정보를 제공하죠. 다만 top이나 htop 명령어와 달리 실시간으로 보여주진 않습니다. 그래도 리눅스 사용자라면 기본적으로 알아야 합니다.

  ps 명령어에는 2가지의 사용법이 있습니다. 바로 BSD 방식과  UNIX 방식이죠. ps를 처음 배울 땐 두 방식이 있다는 것조차 모르는 경우가 많고 알아도 잘못 사용하는 경우가 많습니다. 예를 들어 "ps aux"는 "ps -aux"와 다릅니다. "-u"는 특정 유저의 프로세스를 볼 때 사용하고 "u"는 자세한 정보를 출력시킬 때 사용합니다.

  BSD 방식은 옵션 앞에 "-"를 붙이지 않습니다.
ps aux
  UNIX/LINUX 방식은 옵션 앞에 "-"를 붙입니다.
ps -ef
  리눅스의 경우 두 방식을 동시에 사용하는 것이 가능합니다. 예를 들어 "ps ax -f" 같은 것도 실행할 수 있습니다.


1. 모든 프로세스 출력
  아래의 명령어로 모든 프로세스를 볼 수 있습니다. 파이프로 출력을 "less" 같은 명령어에 넘기면 스크롤하며 볼 수 있습니다.
$ ps ax
$ ps -e
  "u"나 "-f" 옵션을 사용하면 자세한 정보를 볼 수 있습니다.
$ ps aux
$ ps -ef
  참고로 유저명이 8글자를 넘을 경우 공간 때문에 유저명 대신 UID가 USER 칼럼에 표시됩니다.

2. 특정 유저의 프로세스 출력
  특정 유저가 소유한 프로세스만 보고 싶을 경우 "-u" 옵션 뒤에 유저명을 입력하면 됩니다. 콤마로 여러 유저명을 입력할 수 있습니다.
$ ps -f -u www-data
UID        PID  PPID  C STIME TTY          TIME CMD
www-data  1329  1328  0 09:32 ?        00:00:00 nginx: worker process
www-data  1330  1328  0 09:32 ?        00:00:00 nginx: worker process
www-data  1332  1328  0 09:32 ?        00:00:00 nginx: worker process
www-data  1377  1372  0 09:32 ?        00:00:00 php-fpm: pool a.localhost                                              
www-data  1378  1372  0 09:32 ?        00:00:00 php-fpm: pool a.localhost                                              
www-data  4524  2359  0 10:03 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  4527  2359  0 10:03 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  4528  2359  0 10:03 ?        00:00:00 /usr/sbin/apache2 -k start

3. 이름이나 프로세스 id로 출력
  프로세스의 이름이나 실행할 때 사용한 명령어로 프로세스를 찾으려면 "-C" 옵션 뒤에 검색할 단어를 입력합니다.
$ ps -C apache2
  PID TTY          TIME CMD
 2359 ?        00:00:00 apache2
 4524 ?        00:00:00 apache2
 4525 ?        00:00:00 apache2
...
  프로세스 id로 검색하려면 "-p" 옵션 뒤에 (콤마로 나눠서)프로세스 id들을 입력합니다.
$ ps -f  -p 3150,7298,6544
  "-C" 옵션을 사용할 땐 프로세스의 이름을 정확히 적어야 하며 부분적으로 적거나 와일드카드를 사용할 순 없습니다. 그렇기 때문에 일반적으로 프로세스를 검색할 땐 grep 명령어를 사용합니다.
$ ps -ef | grep apache

4. CPU나 메모리 사용률로 정렬
  시스템 관리자라면 메모리나 CPU를 많이 차지하는 프로세스를 찾을 때가 많습니다. 정렬 옵션을 사용하면 특정 필드나 파라미터를 기준으로 프로세스 목록을 정렬할 수 있습니다.

  다수의 필드를 기준으로 삼을 때는 "--sort" 옵션 뒤에 원하는 필드들을 콤마로 구분하여 적으면 됩니다. 또한 각 필드명 앞에 "-"나 "+"를 붙여 각각 내림차순이나 오름차순으로 정렬이 가능합니다.
$ ps aux --sort=-pcpu,+pmem
  아래는 CPU를 가장 많이 소모하고 있는 프로세스 5개를 보는 모습입니다.
$ ps aux --sort=-pcpu | head -5
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  2.6  0.7  51396  7644 ?        Ss   02:02   0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 23
root      1249  2.6  3.0 355800 30896 tty1     Rsl+ 02:02   0:02 /usr/bin/X -background none :0 vt01 -nolisten tcp
root       508  2.4  1.6 248488 16776 ?        Ss   02:02   0:03 /usr/bin/python /usr/sbin/firewalld --nofork
silver    1525  2.1  2.3 448568 24392 ?        S    02:03   0:01 /usr/bin/python /usr/share/system-config-printer/applet.py

5. 트리 형태로 보기
  프로세스 중 다수는 다른 부모 프로세스로부터 fork된 것이며 이 부모와 자식 관계를 파악하는 것이 중요할 때가 있습니다. 아래는 이름이 apache2인 프로세스를 검색하여 트리 형태로 출력하는 모습입니다.
$ ps -f --forest -C apache2
UID        PID  PPID  C STIME TTY          TIME CMD
root      2359     1  0 09:32 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  4524  2359  0 10:03 ?        00:00:00  \_ /usr/sbin/apache2 -k start
www-data  4525  2359  0 10:03 ?        00:00:00  \_ /usr/sbin/apache2 -k start
www-data  4526  2359  0 10:03 ?        00:00:00  \_ /usr/sbin/apache2 -k start
www-data  4527  2359  0 10:03 ?        00:00:00  \_ /usr/sbin/apache2 -k start
www-data  4528  2359  0 10:03 ?        00:00:00  \_ /usr/sbin/apache2 -k start
  참고로 트리 형태로 출력할 땐 정렬을 사용하지 않아야 합니다.

6. 부모 프로세스의 자식 프로세스 출력
  아래는 apache 프로세스로부터 fork된 모든 프로세스를 찾는 예입니다.
$ ps -o pid,uname,comm -C apache2
  PID USER     COMMAND
 2359 root     apache2
 4524 www-data apache2
 4525 www-data apache2
 4526 www-data apache2
 4527 www-data apache2
 4528 www-data apache2
[term]

The first process that is owned by root is the main apache2 process and all other apache2 processes have been forked out of this main process. The next command lists all child apache2 processes using the pid of the main apache2 process

[term]
$ ps --ppid 2359
  PID TTY          TIME CMD
 4524 ?        00:00:00 apache2
 4525 ?        00:00:00 apache2
 4526 ?        00:00:00 apache2
 4527 ?        00:00:00 apache2
 4528 ?        00:00:00 apache2

7. 프로세스의 쓰레드 출력
  "-L" 옵션을 사용하면 프로세스들의 쓰레드들을 출력할 수 있습니다. 한 프로세스의 모든 쓰레드를 출력할 수도 있고 모든 프로세스의 쓰레드를 출력할 수도 있습니다. 아래는 PID가 3150인 프로세스가 소유한 모든 쓰레드를 보는 명령어입니다.
$ ps -p 3150 -L

8. 출력할 칼럼 지정
  원하는 칼럼들만 출력하게 할 수도 있습니다. 아래 명령어는 PID, 유저명, CPU, 메모리, 명령어 칼럼만 출력시키는 예입니다.
$ ps -e -o pid,uname,pcpu,pmem,comm
  칼럼명을 변경하는 것도 가능합니다.
$ ps -e -o pid,uname=USERNAME,pcpu=CPU_USAGE,pmem,comm
  PID USERNAME CPU_USAGE %MEM COMMAND
    1 root           0.0  0.0 init
    2 root           0.0  0.0 kthreadd
    3 root           0.0  0.0 ksoftirqd/0
    4 root           0.0  0.0 kworker/0:0
    5 root           0.0  0.0 kworker/0:0H
    7 root           0.0  0.0 migration/0
    8 root           0.0  0.0 rcu_bh
    9 root           0.0  0.0 rcuob/0
   10 root           0.0  0.0 rcuob/1

9. 프로세스가 존재한 시간 출력
  프로세스가 실행되고 나서 흐른 시간은 기본 상태에선 출력되지 않으며 "-o" 옵션을 사용해야 합니다.
$ ps -e -o pid,comm,etime

10. ps로 프로세스를 실시간으로 보기
  아래처럼 watch 명령어를 사용하면 실시간으로 프로세스를 관찰할 수 있습니다.
$ watch -n 1 'ps -e -o pid,uname,cmd,pmem,pcpu --sort=-pmem,-pcpu | head -15'
Every 1.0s: ps -e -o pid,uname,cmd,pmem,pcpu --...  Sun Dec  1 18:16:08 2013

  PID USER     CMD                         %MEM %CPU
 3800 1000     /opt/google/chrome/chrome -  4.6  1.4
 7492 1000     /opt/google/chrome/chrome -  2.7  1.4
 3150 1000     /opt/google/chrome/chrome    2.7  2.5
 3824 1000     /opt/google/chrome/chrome -  2.6  0.6
 3936 1000     /opt/google/chrome/chrome -  2.4  1.6
 2936 1000     /usr/bin/plasma-desktop      2.3  0.2
 9666 1000     /opt/google/chrome/chrome -  2.1  0.8
 3842 1000     /opt/google/chrome/chrome -  2.1  0.8
 4739 1000     /opt/google/chrome/chrome -  1.8  1.0
 3930 1000     /opt/google/chrome/chrome -  1.7  1.0
 3911 1000     /opt/google/chrome/chrome -  1.6  0.6
 3645 1000     /opt/google/chrome/chrome -  1.5  0.4
 3677 1000     /opt/google/chrome/chrome -  1.5  0.4
 3639 1000     /opt/google/chrome/chrome -  1.4  0.4
  위 명령어를 사용하면 1초마다 출력이 갱신된다. 단, top은 기본적으로 CPU와 메모리 사용률을 종합적으로 비교하여 정렬하는 반면 위에서는 메모리를 먼저 비교 후 CPU 사용률을 비교하여 정렬했기 때문에 결과는 서로 다를 것이다.
2013/12/05 15:40 2013/12/05 15:40