ps는 프로세스 목록을 조회하기 위해, grep은 원하는 텍스트가 포함된 문자열만 콘솔에 출력하기 위해, awk는 입력 데이터를 행과 단어 별로 처리해 출력하기 위해 사용합니다. 이 3개를 조합하면, python이라는 키워드가 포함된 프로세스 목록에서 프로세스 ID만을 가져오는 등의 일을 할 수 있습니다.

ps

실행 중인 프로세스를 봅니다. 자주 사용하는 flag들은 아래와 같습니다.

ps au

a는 다른 유저의 프로세스까지 함께 조회하는 것을 의미하고, u는 프로세스를 실행한 유저, CPU, 메모리 usage, 상태 등을 함께 조회합니다.

> ps au
USER    PID  %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND
root  31206   0.7  0.0  4268244   1164 s001  R+   10:39PM   0:00.00 ps au
planb 29678   0.1  0.0  4308544   1608 s001  S    10:32PM   0:00.05 -bash
root  29677   0.0  0.0  4341328   6336 s001  S    10:32PM   0:00.02 login -fp planb
planb 29676   0.0  0.1  4345384  14428 s001  Ss   10:32PM   0:00.03 /Applications/iTerm.app/Cont

프로세스의 상태

모든 프로세스에는 상태가 있습니다. 위의 STAT 컬럼에 있는 R+, S, Ss 등이 상태입니다.

  • D : Uninterruptible sleep(종료할 수 없는(깨울 수 없는) sleep 상태)
  • R : 실행 중, 또는 실행 가능한 상태
  • S : Interruptible sleep(종료할 수 있는(깨울 수 있는) sleep 상태)
  • T : 중지됨(작업 제어 신호를 받거나, 트레이싱 때문에)
  • X : 죽음(대부분 보이지 않음)
  • Z : Defunct(좀비) 프로세스. 종료되었으나 부모 프로세스에 의해 수습되지 않음

grep

grep은 사실 특정 문자열이 들어있는 파일을 검색하고 싶을 때 사용하는데, 콘솔 output에서 특정 문자열이 들어있는 부분만 가져오기 위해서도 사용됩니다.

> ps au | grep python
root     15790  0.0  0.1  68008  4036 pts/6    S    21:46   0:00 sudo -E python3.4 server.py
root     15791  1.4  3.1 1757368 63708 pts/6   Sl   21:46   0:50 python3.4 server.py
root     15806 99.8  2.1 546964 43980 pts/6    R    21:46  57:09 python3.4 server.py

python이 포함된 라인만 출력되는 것을 볼 수 있습니다.

-v

grep -v는 해당 문자열이 제외된, 즉 문자열이 포함되어 있지 않은 라인을 출력합니다.

> ps au | grep -v python
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       812  0.0  0.0  14556    12 tty4     Ss+  Jan11   0:00 /sbin/getty -8 38400 tty4
root       815  0.0  0.0  14556    12 tty5     Ss+  Jan11   0:00 /sbin/getty -8 38400 tty5
root       820  0.0  0.0  14556    12 tty2     Ss+  Jan11   0:00 /sbin/getty -8 38400 tty2

python이 포함되어 있지 않은 라인만 출력되는 것을 볼 수 있습니다.

egrep

egrep은 정규 표현식을 지원하여 여러 개의 문자열을 동시에 찾을 수 있습니다.

> ps au | egrep "python|mongod" | grep -v sudo
root      6129  1.8  5.5 367280 113984 pts/1   Sl+  May09  36:18 mongod --auth
root     15791  1.4  3.1 1757368 63708 pts/6   Sl   21:46   0:52 python3.4 server.py
root     15806 99.8  2.1 546964 43980 pts/6    R    21:46  61:36 python3.4 server.py
root     17320  0.0  0.1   8184  2108 pts/0    S+   22:48   0:00 egrep --color=auto python|mongod

python이나 mongod가 포함되어 있고, sudo가 포함되지 않은 라인을 출력합니다.

awk

grep과 비슷하게, 패턴을 검색하고 처리하기 위한 언어입니다. grep처럼 파일에서 특정 문자열을 검색하여 가공하기 위한 명령어인데, 콘솔 출력에 적용할 수 있습니다. awk 'pattern', awk {action}, awk 'pattern {action}' 중에 하나의 문법을 사용할 수 있습니다. 여기서는 ps와 grep을 섞어 여기서는 특정 필드만 출력하기 위해 사용하겠습니다. 위에서 말했던, python이라는 키워드가 포함된 프로세스 목록에서 프로세스 ID만을 가져오는 커맨드입니다.

> ps au | grep -v python | awk '{print $2}'
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       812  0.0  0.0  14556    12 tty4     Ss+  Jan11   0:00 /sbin/getty -8 38400 tty4
root       815  0.0  0.0  14556    12 tty5     Ss+  Jan11   0:00 /sbin/getty -8 38400 tty5
root       820  0.0  0.0  14556    12 tty2     Ss+  Jan11   0:00 /sbin/getty -8 38400 tty2

+ Recent posts