ps
documentation. 여기서 설명하는 것 이상으로 유용한 command 및 ps
에서 출력하는 정보에 대한 내용이 써져 있으니 궁금하면 찾아보자.
ps
는 실행되고 있는 process들 중 특정 process들에 대한 정보를 보여주는 command다.
command 실행 '순간'에 있던 process들에 대한 정보를 보여준다.
option을 부여하지 않으면 command를 실행한 시점에서, command가 입력된 tty(terminal)을 통해 실행중인 process들의 snapshot을 보여준다.
$ ps
PID TTY TIME CMD
160 pts/3 00:00:00 bash
258 pts/3 00:00:00 ps
bash
는 terminal 상에 실행되고 있는 shell을, ps
는 방금 우리가 입력한 그 ps
를 나타내는 것이다.ps
에서 사용할만한 몇가지 option에 대해 얘기하기 전에 Linux command에서 option의 종류에 대해 알아보겠다. 이걸 갑자기 언급하는 이유는 ps
command, 그리고 다른 Linux command에 실제로 여러 부류의 option들이 존재하기 때문이다. 꼭 기억하자.
먼저 UNIX style option은 -
이후에 사용할 option들을 넣는것이다. 밑의 경우 option이 a, u, x 3개가 있는 것이다.
$ ps -aux
-
이 들어가지 않는다.$ ps aux
--
이후에 사용할 option들이 나온다. 또 여기에 해당하는 option들은 단어 형식을 가지는게 많고 관련 추가 parameter을 받기도 한다.$ ps --Group 0
저 style들의 어원과 이에 관한 역사에 대해서는 이 링크 참고. Linux는 이 3개에 다 어느정도 영향을 받고 이를 수용하다 보니 command 형식이 지금처럼 잡탕이 되어버렸다. 그만큼 지원하는 기능이 많다고 볼 수도 있지만.
같아 보이는 command여도 형식 차이 때문에 다른 기능을 하는 option이 있다. 예를 들어 ps
에서 UNIX style -a
랑 BSD style a
가 하는 것은 다르며, 이 때문에 ps aux
랑 ps -aux
가 하는 것이 다르다.
또 형식만 다르고 같은 것을 하는 option들이 있다. 예를 들어 ps
에서 Unix style -p
, BSD style p
, GNU style --pid <PID>
는 전부 하는 것이 같다.
ps
with optionsps x
x
option을 사용하면 현재 사용자가 실행한 process들에 대한 정보를 얻을 수 있다.$ ps x
PID TTY STAT TIME COMMAND
14 pts/0 Ss+ 0:00 sh -c "$VSCODE_WSL_EXT_LOCATION/scripts/wslServer.sh" 1a5daa3a0231a0fbb
15 pts/0 S+ 0:00 sh /mnt/c/Users/Seiyeon Cho/.vscode/extensions/ms-vscode-remote.remote-
20 pts/0 S+ 0:00 sh /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d77
24 pts/0 Sl+ 0:03 /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e
37 pts/1 Ssl+ 0:00 /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e
64 pts/2 Ssl+ 0:00 /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e
71 pts/0 Sl+ 0:01 /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e
85 pts/0 Sl+ 0:26 /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e
123 pts/0 Rl+ 0:02 /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e
160 pts/3 Ss 0:00 /usr/bin/bash --init-file /home/sycho/.vscode-server/bin/1a5daa3a0231a0
187 pts/0 Sl+ 0:00 /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e
5261 pts/3 R+ 0:00 ps x
s
는 본인이 session leader임을 나타낸다.S
는 본인이 특정 event를 기다리고 있다는 것을 의미한다. 본인 작업을 안하고 있다가, interrupt가 오면 이에 영향을 받기 때문에 (keyboard interrupt 등) interruptible sleep이라고도 불린다.D
는 본인이 system call 등을 요청해서 이를 기다리는 중임을 의미한다. interrupt에 의해 그 과정이 중단되지 않지만 본인 프로그램이 진행중인건 아니라 uninterruptible sleep이라고 부른다. 보통 IO 관련 작업을 할 때 자주 나온다.R
은 본인이 실행중이거나, schedule 가능한 상태임을 의미한다.T
는 control signal으로 인해 멈춘 상태임을 의미한다. (SIGTSTP)t
는 tracing으로 인해 멈춘 상태임을 말한다.l
은 multi threading중인 process를 의미한다.N
은 scheduling에서 priority가 낮다는 것을 의미한다. (nice)<
은 scheduling에서 priority가 높다는 것을 의미한다. (not-nice)+
는 foreground process group에 해당함을 의미한다.ps
man page에서 PROCESS STATE CODES 항목을 보면 된다.ps ax
ax
option을 사용하면 말그대로 전체 process들에 대한 정보를 얻을 수 있다.$ ps ax
PID TTY STAT TIME COMMAND
1 ? Sl 0:00 /init
12 ? Ss 0:00 /init
13 ? S 0:00 /init
14 pts/0 Ss+ 0:00 sh -c "$VSCODE_WSL_EXT_LOCATION/scripts/wslServer.sh" 1a5daa3a0231a0fbba4f14db7ec463cf99d7768e stable code-server .vscode-server --host=127.0.0.1 --port=0 --connection-token=96859214-3955224477-3353073100-6857564
15 pts/0 S+ 0:00 sh /mnt/c/Users/Seiyeon Cho/.vscode/extensions/ms-vscode-remote.remote-wsl-0.81.8/scripts/wslServer.sh 1a5daa3a0231a0fbba4f14db7ec463cf99d7768e stable code-server .vscode-server --host=127.0.0.1 --port=0 --connec
20 pts/0 S+ 0:00 sh /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/bin/code-server --host=127.0.0.1 --port=0 --connection-token=96859214-3955224477-3353073100-685756481 --use-host-proxy --without-browser-
24 pts/0 Sl+ 0:04 /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/out/server-main.js --host=127.0.0.1 --port=0 --connection-token
35 ? Ss 0:00 /init
36 ? S 0:00 /init
37 pts/1 Ssl+ 0:01 /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node -e const net = require('net'); process.stdin.pause(); const client = net.createConnection({ host: '127.0.0.1', port: 36691 }, () => { c
62 ? Ss 0:00 /init
63 ? S 0:00 /init
64 pts/2 Ssl+ 0:01 /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node -e const net = require('net'); process.stdin.pause(); const client = net.createConnection({ host: '127.0.0.1', port: 36691 }, () => { c
71 pts/0 Sl+ 0:02 /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/out/bootstrap-fork --type=fileWatcher
85 pts/0 Sl+ 0:33 /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node --dns-result-order=ipv4first /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/out/bootstrap-fork --type=extensio
123 pts/0 Rl+ 0:02 /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/out/bootstrap-fork --type=ptyHost --logsPath /home/sycho/.vscod
160 pts/3 Ss 0:00 /usr/bin/bash --init-file /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/out/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh
187 pts/0 Sl+ 0:00 /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/extensions/json-language-features/server/dist/node/jsonServerMa
6799 pts/3 R+ 0:00 ps ax
ps -He
-e
는 parameter 없는 ps
가 출력하는 column들만으로 모든 process에 대한 정보를 주며, -H
는 tree structure 형태로 process들 사이 관계를 나타낸다. 그래서 이를 조합하면 (-He
) 모든 process의 tree structure을 파악하는게 가능하다.$ ps -He
PID TTY TIME CMD
1 ? 00:00:00 init
12 ? 00:00:00 init
13 ? 00:00:00 init
14 pts/0 00:00:00 sh
15 pts/0 00:00:00 sh
20 pts/0 00:00:00 sh
24 pts/0 00:00:04 node
71 pts/0 00:00:02 node
85 pts/0 00:00:36 node
187 pts/0 00:00:00 node
123 pts/0 00:00:03 node
160 pts/3 00:00:00 bash
7450 pts/3 00:00:00 ps
35 ? 00:00:00 init
36 ? 00:00:00 init
37 pts/1 00:00:01 node
62 ? 00:00:00 init
63 ? 00:00:00 init
64 pts/2 00:00:01 node
ps -axjf
를 대신 사용하는게 좋을 수도 있다.ps -axjf
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
0 1 0 0 ? -1 Sl 0 0:00 /init
1 12 12 12 ? -1 Ss 0 0:00 /init
12 13 12 12 ? -1 S 0 0:00 \_ /init
13 14 14 14 pts/0 14 Ss+ 1000 0:00 \_ sh -c "$VSCODE_WSL_EXT_LOCATION/scripts/wslServer.sh" 1a5daa3a0231a0fbba4f14db7ec463cf99d7768e stable code-server .vscode-server --host=127.0.0.1 --port=0 --connection-token=
14 15 14 14 pts/0 14 S+ 1000 0:00 \_ sh /mnt/c/Users/Seiyeon Cho/.vscode/extensions/ms-vscode-remote.remote-wsl-0.81.8/scripts/wslServer.sh 1a5daa3a0231a0fbba4f14db7ec463cf99d7768e stable code-server .vscode
15 20 14 14 pts/0 14 S+ 1000 0:00 \_ sh /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/bin/code-server --host=127.0.0.1 --port=0 --connection-token=96859214-3955224477-3353073100
20 24 14 14 pts/0 14 Sl+ 1000 0:05 \_ /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/out/server-ma
24 71 14 14 pts/0 14 Sl+ 1000 0:02 \_ /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/out/boots
24 85 14 14 pts/0 14 Sl+ 1000 0:38 \_ /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node --dns-result-order=ipv4first /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f1
85 187 14 14 pts/0 14 Sl+ 1000 0:00 | \_ /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/exten
24 123 14 14 pts/0 14 Sl+ 1000 0:03 \_ /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/out/boots
123 160 160 160 pts/3 8182 Ss 1000 0:00 \_ /usr/bin/bash --init-file /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/out/vs/workbench/contrib/terminal/browser/media/shellInt
160 8182 8182 160 pts/3 8182 R+ 1000 0:00 \_ ps -axjf
1 35 35 35 ? -1 Ss 0 0:00 /init
35 36 35 35 ? -1 S 0 0:00 \_ /init
36 37 37 37 pts/1 37 Ssl+ 1000 0:01 \_ /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node -e const net = require('net'); process.stdin.pause(); const client = net.createConnection({ host:
1 62 62 62 ? -1 Ss 0 0:00 /init
62 63 62 62 ? -1 S 0 0:00 \_ /init
63 64 64 64 pts/2 64 Ssl+ 1000 0:01 \_ /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node -e const net = require('net'); process.stdin.pause(); const client = net.createConnection({ host:
PPID
를 통해 각 PID의 parent 파악 가능, PGID
, SID
, TPGID
, UID
를 통해 process group ID, session ID, Terminal Process Group ID, User ID등을 파악하는게 가능하다. 자세한건 이 링크 참고. 참고로 UID 0은 root
를 의미한다. 또 첫 non-system user이 등장시 UID
가 1000이 부여된다.ps aux
ps aux
가 있다.ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 908 536 ? Sl 17:16 0:00 /init
root 12 0.0 0.0 916 84 ? Ss 17:16 0:00 /init
root 13 0.0 0.0 916 92 ? S 17:16 0:00 /init
sycho 14 0.0 0.0 2884 1012 pts/0 Ss+ 17:16 0:00 sh -c "$VSCODE_WSL_EXT_LOCATION/scripts/wslServer.sh" 1a5daa3a0231a0fbba4f14db7ec463cf99d7768e stable code-server .vscode-server --host=127.0.0.1 --port=0 --connection-token=
sycho 15 0.0 0.0 2884 960 pts/0 S+ 17:16 0:00 sh /mnt/c/Users/Seiyeon Cho/.vscode/extensions/ms-vscode-remote.remote-wsl-0.81.8/scripts/wslServer.sh 1a5daa3a0231a0fbba4f14db7ec463cf99d7768e stable code-server .vscode-ser
sycho 20 0.0 0.0 2884 952 pts/0 S+ 17:16 0:00 sh /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/bin/code-server --host=127.0.0.1 --port=0 --connection-token=96859214-3955224477-3353073100-6857564
sycho 24 0.1 0.3 956156 91068 pts/0 Sl+ 17:16 0:05 /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/out/server-main.js --host
root 35 0.0 0.0 916 84 ? Ss 17:16 0:00 /init
root 36 0.0 0.0 916 92 ? S 17:16 0:00 /init
sycho 37 0.0 0.2 602240 55580 pts/1 Ssl+ 17:16 0:01 /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node -e const net = require('net'); process.stdin.pause(); const client = net.createConnection({ host:
root 62 0.0 0.0 916 84 ? Ss 17:16 0:00 /init
root 63 0.0 0.0 916 92 ? S 17:16 0:00 /init
sycho 64 0.0 0.1 597536 51260 pts/2 Ssl+ 17:16 0:01 /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node -e const net = require('net'); process.stdin.pause(); const client = net.createConnection({ host:
sycho 71 0.0 0.2 849288 59008 pts/0 Sl+ 17:16 0:02 /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/out/bootstrap-fork --type
sycho 85 0.8 0.4 992384 125744 pts/0 Sl+ 17:16 0:42 /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node --dns-result-order=ipv4first /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d77
sycho 123 0.0 0.2 653780 66960 pts/0 Rl+ 17:16 0:03 /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/out/bootstrap-fork --type
sycho 160 0.0 0.0 6236 5316 pts/3 Ss 17:16 0:00 /usr/bin/bash --init-file /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/out/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh
sycho 187 0.0 0.2 603412 53768 pts/0 Sl+ 17:16 0:00 /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node /home/sycho/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/extensions/json-language-
sycho 8998 0.0 0.0 7480 3132 pts/3 R+ 18:43 0:00 ps aux
이 option의 유용한 점은
UID
가 USER
로 대체되어서 가독성이 좀 더 좋다. (특히 여러 사용자가 사용하는 경우)%CPU
, %MEM
을 통해 각 process가 사용하는 CPU, memory 비율 파악이 가능하다.START
를 통해 시작 시간을 파악할 수 있다. 전날에 시작한게 있으면 시작 날짜를 보여준다.이 외에도
VSZ
를 통해 process가 사용하는 virtual memory size 파악이 가능하다. 단위는 KBRSS
를 통해 process가 사용하는 메모리 중 실제로 물리적 RAM 상에 있는 memory를 파악하는게 가능하다. 단위는 KB