Skip to content

ps 수행중인 프로세스 표시

MintState December 4, 2008 at 10:27 PM Views 21914

ps 수행중인 프로세스 표시

수행중인 프로세스(프로세스 자체에 수행중이라는 의미가 있지만) 정보를 표시한다. ps(Process Status) 유틸리티 옵션에는 - 문자를 덧붙이지 않아도 좋다.

a 모든 프로세스 목록에 대한 정보를 표시한다.
f 트리 형태로 프로세스 정보를 표시한다. (Forest)
l 긴 포맷으로 표시한다.
u 이용자 이름과 시작 시각을 포함한다.
x 터미널과 관련 없는 프로세스도 포함한다.

-sort[+ | -]key... 지정한 키에 따라 정렬한다.

정렬키
c cmd
C cmdline
f flags
g pgrp (group ID)
p pid
P ppid (Parent's process ID)
s size
T start_time
U uid
u user (user name)

필드
USER 프로세스의 소유자 이름
PID 프로세스를 구분하는 고유 식별 번호
%CPU 프로세스의 CPU 점유율
%MEM 프로세스의 메모리 점유율
RSS 프로세스가 이용하는 메모리 크기
TTY 프로세스가 수행된 터미널 번호
STAT 수행중인 프로세스 상태
S 잠들어 있다.
R 수행 중
Z 좀비 프로세스
TIME 프로세스가 이용한 시간
COMMAND 수행중인 명령에 대한 정보

쓰는 법
가장 일반적인 형태 ps ax
상세하게 보고 싶을 때 ps al

[mintstate@chem-server mintstate]$ ps --help
********* 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 leader OR by 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  all, even group leaders!           -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
-j,j job control   s  signal          --group --user --sid --rows
-O,O preloaded -o  v  virtual memory  --cumulative --format --deselect
-l,l long          u  user-oriented   --sort --tty --forest --version
                   X  registers       --heading --no-heading
                    ********* misc options *********
-V,V show version       L  list format codes  f  ASCII art forest
-m,m show threads       S  children in sum    -y change -l format
-n,N set namelist file  c  true command name  n  numeric WCHAN,UID
-w,w wide output        e  show environment   -H process heirarchy

**
프로세스 컨트롤

1.ps명령어
:: 시스템에서 시작되는 프로세서는 각각 고유한 식별번호 프로세서ID(PID)를 가진다
ps명령은 시스템에서 현재 실행중인(sleep상태도 포함)프로세스에 대한 정보를 각 PID와 각 프로세스의 부모 ID(PPID)를 표시해 준다.
     
[syntax]
ps [-option]
:: 옵션에는 아래와 같은 것들이 있다.
 -e ==> 시스템에서 수행중인 모든 프로세서 정보를 보여준다.
 -f ==> 위의 옵션과 같이 주어지며 세부정보를 보여준다. 이 옵션을 통해서 PPID(부모 프로세서)를 알수있다.

[예제]

$ ps 
PID TTY       TIME COMMAND 
6931 pts/te    0:00 ps 
6781 pts/te    0:00 telnetd 
6784 pts/te    0:00 sh 

:: 자신이 실행한 프로세서를 보여준다.        
$ ps -ef 
UID   PID  PPID  C    STIME TTY       TIME COMMAND 
root     0     0  0  Mar 11  ?         0:03 swapper 
root     1     0  0  Mar 11  ?         0:00 init 
root     2     0  0  Mar 11  ?         0:03 vhand 
root     3     0  0  Mar 11  ?         6:48 statdaemon       
...이하생략 

$ ps -ef| grep user6 
user6  6937  6784  0 15:01:30 pts/te    0:00 grep user6 
user6  6769  6768  0 14:12:12 pts/tc    0:00 -sh 
user6  6784  6781  0 14:12:18 pts/te    0:00 -sh 
user6  6936  6784  3 15:01:30 pts/te    0:00 ps -ef       
         
::자신이 실행한 프로세서 목록을 보았다.

 
         
[Tip]
:: ps명령은 CPU를 주로 사용하는 명령이므로 응답시간이 느려질수도 있다.
   
  
2. 실제적인 프로세서 제어
:: 위에서 프로세서에 대해 간략하게 알아보았다. 여기서는 실제 작동중인 프로세서를 제어해 보도록하자.
     
- 백그라운드 작업 -
[syntax]
명령어 &
:: 명령어 다음에 엠퍼센드(&)를 붙이면 해당 작업은 백그라운드로 수행된다. 백그라운드 작업이란 현재 쉘을 사용할수 있게 만들어 주는 멀티플랙작업이 가능하게 해주는 유닉스의 융통성이 뛰어난 작업이다.

[예제]

$ sleep 200 & 
[1]     6938 
$ 

 
:: 위에서 앞의 [1]은 자신이 수행한 백그라운드 프로세서의 순차적인 번호(ob Number라고도 한다.)이고, 뒤의 194는 해당 백그라운드 작업의 PID(프로세서ID)값인 것이다.
       

$ ps 
PID TTY       TIME COMMAND 
6939 pts/te    0:00 ps 
6781 pts/te    0:00 telnetd 
6784 pts/te    0:00 sh 
6938 pts/te    0:00 sleep  <==위에서 실행한 프로세서가 보일것이다. 

 $
               
[Tip]
:: 백그라운드 작업중인 프로세서는 일반적인 "Ctrl + c"명령으로 제어할수가 없다. ps를 통한 프로세서ID를 kill하거나 로그아웃하면 중지된다. 로그아웃을 할경우 해당 작업이 완료되지 않으면 $ There are running jobs. 이라는 메시지를 보여준다.

- 프로세서의 그라운드 이동 -
:: 제목이 조금 이상하군여(^^).현재 백그라운드나 포그라운드에 진행중인 프로세서를 각각 포그라운드나 백그라운드로 이동시킨다.

[syntax]
fg [%PID]
fg [%명령어]
bg [%PID]
bg [%명령어]
     
:: PID 와 실행한 명령어로도 가능하다.

[예제]

$ sleep 200    <== 포그라운드로 명령을 실행 
"ctrl + z"를 입력하면 해당 프로세스가 잠시 중지된다. 
[1] + Stopped                     sleep 200 
$ bg %1  <== 백그라운드로 전환한다. 
[1]     sleep 200& 
$ jobs   <== 백그라운드로 진행되고 있는지 확인한다. 
[1] +  Running                    sleep 200 
$ fg %1  <== 백그라운드 작업을 포그라운드로 전환한다. 
sleep 200

 
         
[Tip]
:: 포그라운드 작업을 중지시키는 명령인 "ctrl + z"는 .profile 에서 "stty susp ^z "라는 엔트리를 사용하여 로그인시 지정된다.

- nohup 명령어 -
:: 명령의 정지나 로그아웃에 영향을 받지 않는 명령으로 유닉스 시스템의 접두부(다른명령의 앞에 오는 명령)명령의 하나이다. 따라서 해당 명령을 지속적으로 실행하고자 할때 사용된다.

[syntax]
nohup 명령어 &

[예제]

$ nohup sleep 400 &  <== 명령실행 
[1]     7026 
$ Sending output to nohup.out  <== nohup의 표준출력파일이 생성된다. 

이제 로그아웃해본다. 
ctrl + d 
$ There are running jobs.  <== 작업이 있다고 알려준다.그래도 로그아웃한다. 
ctrl + d 
     
다시 로그인 한다. 
$ ps -ef| grep user6 
user6  7026     1  0 15:52:03 ?         0:00 sleep 400  <== 실행중이군여.. 
user6  7049  7029 14 15:53:00 pts/tg    0:00 ps -ef 
user6  6769  6768  0 14:12:12 pts/tc    0:00 -sh 
user6  7050  7029  3 15:53:00 pts/tg    0:00 grep user6 
user6  7029  7028  0 15:52:38 pts/tg    0:00 -sh 
$ 

 
     
[Tip]
:: nohup 명령의 출력방향을 지정하지 않으면 Default로 nohup.out이라는 파일이 생성된다. 이파일에는 표준출력과 표준에러가 모두 기록된다.

- nice 명령어 -
:: 유닉스의 멀티플랙스한 점은 CPU를 시분할 시스템으로 분할하여 CPU에게 작업을 할당한다. nice는 작업의 우선순위를 결정한다.

[syntax]
nice [-N] 명령어
     
:: N은 1에서 15사이의 낮은 우선순위로 실행된다. 이것은 백그라운드에서의 작업할당번호이다.

[예제]

$ nice -10 sleep 200 & 
[1]     7151 
$ ps -l  <== 프로세서 우선순위를 볼수있다. 
S      UID   PID  PPID  C PRI NI     ADDR   SZ    WCHAN TTY       TIME COMD 
1 S    306  7151  7029 12 168 34  14d5600    9  14d7620 pts/tg    0:00 sleep 
1 R    306  7152  7029 10 180 20  1354b00   30        - pts/tg    0:00 ps 
1 S      0  7028   958  0 154 20  1768900   32  14f3038 pts/tg    0:00 telnetd 
1 S    306  7029  7028  2 158 20  1597000   63   c11cc0 pts/tg    0:00 sh 
$

 

nice값은 NI항목에 표시된다. 위에서 보듯이 nice값이 34이다.
이것은 기본nice값이 20이고 그리고 nice 실행시 더한값이 10이고 그리고 백그라운드시
4가 더해지기 때문이다.
     
[Tip]
:: nice의 초기시작 값은 20이다. 백그라운드로 실행할 경우 포그라운드보다 +4 가된다. 따라서 포그라운드일 경우에는 작업할당번호가 1~19까지이다.

- kill(프로세서 죽이기) -
:: TERM신호를 지정된 프로세스에 보낸다. 해당 프로세스를 종료하도록 요구한다.

[syntax]
kill [-s 시그널이름] PID
     
:: kill PID하여도 된다.
     
[예제]

$ sleep 400 & 
[1]     7182 
$ ps -l 
F S      UID   PID  PPID  C PRI NI     ADDR   SZ    WCHAN TTY       TIME COMD 
1 R      306  7185  7029 10 180 20  16af200   30        - pts/tg    0:00 ps 
1 S      306  7182  7029  0 168 24  1597100    9  1b34ae0 pts/tg    0:00 sleep 
1 S        0  7028   958  0 154 20  1768900   32  14f3038 pts/tg    0:00 telnetd 
1 S      306  7029  7028  0 158 20  1597000   64   c11cc0 pts/tg    0:00 sh 
$ kill 7182   
[1] + Terminated                  sleep 400 & 

$ kill -s  <==선택항목을 볼수있다. 
$ kill -l  <==이것도 해보기 바란다.signal_name의 모든값을 기록한다. 

 

[Tip]
:: 좀비프로세스란 해당 프로세서가 defunct난 경우로 kill명령어로 죽지 않는 경우가 있다. 확인은 ps -ef 로 CMD 가 난 경우이다.
프로세스 테이블은 프로세스 가동갯수가 있는데 좀비프로세스는 프로세서 테이블을 차지함으로서 자원을 소모한다.
이때는 시스템을 재가동 하는 경우가 대부분이다.

Share X Facebook LINE QR code

0 comments

Be the first to comment.