Linux Command - ps

sycho·2023년 11월 30일
0

Linux Commands

목록 보기
1/30

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
  • 위의 경우의 element를 분석해보면
    • PID : process ID. OS에서 관리하는데 사용되는 ID
    • TTY : teletypewriter. 해당 process를 발생시킨 terminal이라고 생각하면 되며 깊게 들어갈거면 이 링크 참고
    • TIME : 해당 process가 cpu를 활용한 시간. 생성후 경과한 시간을 의미하는게 아니라 CPU time을 나타내는 것이다.
    • CMD : process에서 진행중인 command
  • 위 예제의 경우 bash는 terminal 상에 실행되고 있는 shell을, ps는 방금 우리가 입력한 그 ps를 나타내는 것이다.

Linux option style

  • ps에서 사용할만한 몇가지 option에 대해 얘기하기 전에 Linux command에서 option의 종류에 대해 알아보겠다. 이걸 갑자기 언급하는 이유는 ps command, 그리고 다른 Linux command에 실제로 여러 부류의 option들이 존재하기 때문이다. 꼭 기억하자.

  • 먼저 UNIX style option은 - 이후에 사용할 option들을 넣는것이다. 밑의 경우 option이 a, u, x 3개가 있는 것이다.

$ ps -aux
  • 다음으로 BSD style option인데, -이 들어가지 않는다.
$ ps aux
  • 마지막으로 GNU style option이다. -- 이후에 사용할 option들이 나온다. 또 여기에 해당하는 option들은 단어 형식을 가지는게 많고 관련 추가 parameter을 받기도 한다.
$ ps --Group 0
  • 저 style들의 어원과 이에 관한 역사에 대해서는 이 링크 참고. Linux는 이 3개에 다 어느정도 영향을 받고 이를 수용하다 보니 command 형식이 지금처럼 잡탕이 되어버렸다. 그만큼 지원하는 기능이 많다고 볼 수도 있지만.

  • 같아 보이는 command여도 형식 차이 때문에 다른 기능을 하는 option이 있다. 예를 들어 ps에서 UNIX style -a랑 BSD style a가 하는 것은 다르며, 이 때문에 ps auxps -aux가 하는 것이 다르다.

  • 또 형식만 다르고 같은 것을 하는 option들이 있다. 예를 들어 ps에서 Unix style -p, BSD style p, GNU style --pid <PID>는 전부 하는 것이 같다.

ps with options

ps 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
  • 여기서 Stat도 같이 나오는데, 몇가지만 설명하자면
    • 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 항목을 보면 된다.
  • 또 실행한 command 뿐만 아니라 함께 사용된 parameter이 같이 나옴을 알 수 있다.

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

  • 자주 쓰이는 option 중 하나로 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의 유용한 점은

    • UIDUSER로 대체되어서 가독성이 좀 더 좋다. (특히 여러 사용자가 사용하는 경우)
    • %CPU, %MEM을 통해 각 process가 사용하는 CPU, memory 비율 파악이 가능하다.
    • START를 통해 시작 시간을 파악할 수 있다. 전날에 시작한게 있으면 시작 날짜를 보여준다.
  • 이 외에도

    • VSZ를 통해 process가 사용하는 virtual memory size 파악이 가능하다. 단위는 KB
    • RSS를 통해 process가 사용하는 메모리 중 실제로 물리적 RAM 상에 있는 memory를 파악하는게 가능하다. 단위는 KB
profile
CS 학부생, 핵심 관심 분야 : Embed/System/Architecture/SWE

0개의 댓글