본문 바로가기

리눅스/명령어

[리눅스] ps 명령어 심화 (-ef ...)

 http://util.dicnote.com/bbs/board.php?bo_table=util_info&wr_id=96 
http://target2u.blogspot.com/2007/01/ps.html 

시스템에서 현재 수행되고 있는 프로세스를 확인하는 기초 명령어 되겠다.

보통 어떤 프로그램을 설치하고 실행시킨 후 이게 제대로 작동하나를 확인하기 위해서 혹은

음. 관리자의 직감으로 보건데 뭔가 꺼림찍한게 서버에서 돌고 있는것 같아..! 하는 생각을 확인해보기 위함이다.

실행 프로그램명을 알고 있을 경우 보통

 

ps -ef | grep 프로그램명

 

을 통해 확인한다.

 

ex)

[root@agentlinux ~]# ps -ef | grep sshd
root     11916 31937  0 11:06 ?        00:00:00 sshd: linuxer [priv]
linuxer 11918 11916  1 11:06 ?        00:04:40 sshd: linuxer@pts/1
root     17150 31937  0 17:15 ?        00:00:00 sshd: root@pts/0
root     17180 17152  0 17:16 pts/0    00:00:00 grep sshd
root     31937     1  0 Sep17 ?        00:00:00 /usr/sbin/sshd
[root@agentlinux ~]#

이 경우 PID 31937의 sshd 데몬이 떠있고 sshd를 통해 세명이 접속해있다.. 정도로 볼 수 있겠다-_-;

프로세스가 없이 OS 자체가 존재할 수 없을 정도로 중요한 부분이므로

ps 명령어 역시 무지하게 많은 옵션이 있다.

옵션의 큰 분류로는

 

1

'-'를 맨 앞에 붙여 그룹지어 사용하는  유닉스 옵션

 

2

'-'없이 그룹지어 사용하는 BSD 옵션

 

3

'--'를 맨 앞에 붙여 사용하는 기다란 GNU 옵션

 

되겠다.

자유롭게 섞어 사용할 수 있지만 서로 상반되는 속성을 가진 옵션끼리 사용될 때 충돌이 일어날 수 있다.

 

 

사용 예를 보겠다.

 

표준 방법을 사용해서 시스템의 모든 프로세스를 보려면:

ps -e
ps -ef
ps -eF
ps -ely

-e : 모든 프로세스(-A와 같다)

-f : full format으로 보여준다(자세히 보여준다)

-F : 더 자세히 보여준다

-l : long format으로 보여준다는데 그다지 좋지 않아보인다(좀 잘리는듯-_-)

-y : flag를 안보여준다. -l 옵션하고만 사용할 수 있다고 한다;

BSD 방법을 사용해서 시스템의 모든 프로세스를 보려면:

ps ax
ps axu

프로세스를 트리형식으로 출력하려면

ps -ejH
ps axjf

스레드 관련한 정보를 얻으려면:

ps -eLf
ps axms

보안 정보를 얻으려면:

ps -eo euser,ruser,suser,fuser,f,comm,label
ps axZ
ps -eM

사용자 형식으로 모든 root(real & effective ID)로 실행중인 프로세스를 보려면:

ps -U root -u root u

-U : real UID

-u : effective UID

u : display user-oriented format

직접 정의한 형식으로 프로세스를 출력하려면:

ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
ps -eopid,tt,user,fname,tmout,f,wchan

syslogd의 PID만 출력하려면:

ps -C syslogd -o pid=

PID가 42인 프로그램 이름만 출력하려면:

ps -p 42 -o comm=

 

 

 

 

복잡한걸 다 외우고 할 수도 없고 그냥 두개만 딱 정했다.

ps -ef

: 전체 다 보기

 

ps -f -U USERID -u USERID

: ID가 USERID인 사람으로 돌아가는 프로세스 보기

 

이 외에는 필요할 때 찾아보며 해야겠다-_-

 

 

 

 

********* simple selection *********  ********* selection by list *********
-A all processes                      -C by command name
-N negate selection                   -G by real group ID (supports names)
-a all w/ tty except session leaders  -U by real user ID (supports names)
-d all except session leaders         -g by session OR by effective group name
-e all processes                      -p by process ID
T  all processes on this terminal     -s processes in the sessions given
a  all w/ tty, including other users  -t by tty
g  OBSOLETE -- DO NOT USE             -u by effective user ID (supports names)
r  only running processes             U  processes for specified users
x  processes w/o controlling ttys     t  by tty
*********** output format **********  *********** long options ***********
-o,o user-defined  -f full            --Group --User --pid --cols --ppid
-j,j job control   s  signal          --group --user --sid --rows --info
-O,O preloaded -o  v  virtual memory  --cumulative --format --deselect
-l,l long          u  user-oriented   --sort --tty --forest --version
-F   extra full    X  registers       --heading --no-heading --context
                    ********* misc options *********
-V,V  show version      L  list format codes  f  ASCII art forest
-m,m,-L,-T,H  threads   S  children in sum    -y change -l format
-M,Z  security data     c  true command name  -c scheduling class
-w,w  wide output       n  numeric WCHAN,UID  -H process hierarchy