Logo

ps 쉘 커맨드 사용법

맥이나 리눅스 터미널에서 현재 실행 중인 프로세스를 확인하기 위해서 사용되는 ps 커맨드에 대해서 알아보록 하겠습니다.

무옵션

옵션없이 ps 커맨드를 실행하면 현재 사용자의 세션에서 실행 중인 프로세스를 출력해줍니다. 첫번째 칼럼에서 프로세스의 식별자인 프로세스 아이디를 확인할 수 있으며 마지막 칼럼에서 실행 중인 커맨드를 확인할 수 있습니다.

$ ps
  PID TTY          TIME CMD
 6133 pts/203  00:00:00 sh
 6159 pts/203  00:00:00 ps

-e 옵션

-e (everything) 옵션을 사용하면 현재 사용자 뿐만 아니라 다른 사용자들이 실행하고 있는 모든 프로세스까지 포함해서 출력해줍니다.

$ ps -e
  PID TTY          TIME CMD
  355 ?        00:00:00 vim
  420 pts/198  00:00:00 sh
  606 pts/103  00:00:00 sh
  610 ?        00:00:00 vmlinux
  611 ?        00:00:00 vmlinux
  612 ?        00:00:00 vmlinux
  613 pts/139  00:00:00 sh
  616 pts/141  00:00:00 sh
  (생략)

-f 옵션

-f (full-format) 옵션을 사용하면 각 프로세스에 대한 좀 더 상세한 정보를 출력해줍니다. 예를 들어 UID는 프로세스를 실행한 유저를 알려주고, PPID는 부모 프로세스를 알려줍니다. 또한 STIME은 프로세스의 시작 시간을 알려주며 CMD는 실제 터미널에 입력한 커맨드를 옵션까지 포함해서 알려줍니다.

$ ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
daleseo   6133  6120  0 22:27 pts/203  00:00:00 -sh
daleseo   6865  6133  0 22:37 pts/203  00:00:00 ps -f

위 출력 결과를 통해 제가 실행한 ps -f 프로세스(6865)는 -sh 프로세스의(6133) 자식 프로세스임을 파악할 수 있습니다.

-p 옵션

-p (pid) 옵션을 사용해서 프로세스 아이디를 넘기면 특정 프로세스의 정보만 출력할 수 있습니다.

$ ps -fp 6133
UID        PID  PPID  C STIME TTY          TIME CMD
daleseo   6133  6120  0 22:27 pts/203  00:00:00 -sh

-u 옵션

-u (username) 옵션을 사용해서 사용자 이름을 넘기면 해당 사용자가 실행 중인 프로세스를 출력할 수 있습니다.

$ ps -fu minsoo
UID        PID  PPID  C STIME TTY          TIME CMD
minsoo   22788 22781  0 22:15 pts/180  00:00:00 /bin/sh
minsoo   23714 22781  0 22:15 pts/189  00:00:00 /bin/sh
minsoo   25251 23714  0 22:18 pts/189  00:00:00 vi map.txt

-H 옵션

-H (hierarchy) 옵션을 사용하면 부모와 자식 프로세스의 관계를 들여쓰기를 통해 시각화해줍니다.

ps -fH
UID        PID  PPID  C STIME TTY          TIME CMD
daleseo   6133  6120  0 22:27 pts/203  00:00:00 -sh
daleseo   9081  6133  0 23:08 pts/203  00:00:00   ps -fH

프로세스 찾기

실무에서는 ps -ef |grep 포함 키워드 |grep -v 제외 키워드 형태의 커맨드가 자주 사용되는 것 같습니다. 예를 들어, 현재 호스트에서 nano 커맨드를 이용하고 있는 프로세스를 확인하려면 다음과 같이 실행하면 됩니다.

$ ps -ef |grep nano |grep -v grep
ivan11    5406     1  0 May29 ?        00:00:00 nano
003spar+ 17755     1  0 Jul09 ?        00:00:00 nano first.c
beejane  20607     1  0 Jan10 ?        00:00:00 nano
satyade+ 21297     1  0 Oct09 ?        00:00:00 nano first.c
x7041    23809     1  0 Feb05 ?        00:00:00 nano .bashrc
craigyo  24522     1  0 Feb01 ?        00:00:00 nano
ibusyra2 29934     1  0 Aug06 ?        00:00:00 nano task3.pl

뒤에 |grep -v grep를 붙여준 이유는 결과 목록에서 제가 실행하고 있는 ps 커맨드는 제외하고 싶기 때문입니다. 만약 그냥 ps -ef |grep nano만을 실행했다면 현재 제가 실행하고 있는 ps 커맨드 자체에도 nano 키워드가 포함되어 있기 때문에 결과 목록에 함께 나열될 것입니다.

이상으로 ps 커맨드를 여러 가지 옵션을 조합해서 활용하는 방법에 대해서 알아보았습니다.