본문 바로가기

개발/서버

linux process 제어

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 가 난 경우이다.
프로세스 테이블은 프로세스 가동갯수가 있는데 좀비프로세스는 프로세서
테이블을 차지함으로서 자원을 소모한다.
이때는 시스템을 재가동 하는 경우가 대부분이다.

'개발 > 서버' 카테고리의 다른 글

[su 권한]특정 유저 또는 그룹에만 사용권한  (0) 2012.02.05
기본 Daemon 설명  (0) 2012.02.05
ROUTER 명령어 _ CCNA(ICND)완벽정리  (0) 2012.02.05
각종 데몬프로세서  (0) 2012.02.05
inode 란  (0) 2012.02.05