ps 쉘 커맨드 사용법
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
커맨드를 여러 가지 옵션을 조합해서 활용하는 방법에 대해서 알아보았습니다.
개발자로서 이 정도만 숙지해두셔도 큰 도움이 되실 거라 생각합니다.