출처 : http://blog.naver.com/dudwo567890?Redirect=Log&logNo=130156854673

 

>> kill명령어 <<

리눅스시스템에서 실행되어 있는 많은 프로레스들은 거의 대부분은 init프로레스에 의해서 프로세스관리가 된다.

하지만 kill명령어를 이용하면 특정프로세스에 대하여 직접 원하는 작업들을 수행할수 있다. 해당 프로세스에 특정시그널을 보냄으로서 종료나 재시작 등 여러 작업을 할수 있다는 뜻이다.

kill명령어는 특정프로세스를 죽이기 위해 주로 사용되지만 사실 kill명령어는 특정프로세스에 특정시그널을 보내는 명령어이다. 이 시그널중에 종료하는 시그널을 보냄으로서 해당프로세스를 종료하는것이다. 따라서 종료시그널외에도 여러 시그널을 보낼수 있다.

프로세스에게 보낼수 있는 시그널은 아래와 같은 것들이 있다.

Num

이름

Num

이름

Num

이름

1

SIGHUP

2

SIGINT

3

SIGQUIT

4

SIGILL

5

SIGTRAP

6

SIGABRT

7

SIGBUS

8

SIGFPE

9

SIGKILL

10

SIGUSR1

11

SIGSEGV

12

SIGUSR2

13

SIGPIPE

14

SIGALRM

15

SIGTERM

16

SIGSTKFLT

17

SIGCHLD

18

SIGCONT

19

SIGSTOP

20

SIGTSTP

21

SIGTTIN

22

SIGTTOU

23

SIGURG

24

SIGXCPU

25

SIGXFSZ

26

SIGVTALRM

27

SIGPROF

28

SIGWINCH

29

SIGIO

30

SIGPWR

31

SIGSYS

34

SIGTMIN

35

SIGTMIN+1

36

SIGTMIN+2

37

SIGTMIN+3

38

SIGTMIN+4

39

SIGTMIN+5

40

SIGTMIN+6

41

SIGTMIN+7

42

SIGTMIN+8

43

SIGTMIN+9

44

SIGTMIN+10

45

SIGTMIN+11

46

SIGTMIN+12

47

SIGTMIN+13

48

SIGTMIN+14

49

SIGTMIN+15

50

SIGTMAX-14

51

SIGTMAX-13

52

SIGTMAX-12

53

SIGTMAX-11

54

SIGTMAX-10

55

SIGTMAX-9

56

SIGTMAX-8

57

SIGTMAX-7

58

SIGTMAX-6

59

SIGTMAX-5

60

SIGTMAX-4

61

SIGTMAX-3

62

SIGTMAX-2

63

SIGTMAX-1

64

SIGTMAX

 

 

, 특정프로세스에게 실행종료시그널, 재시작시그널등 명령어의 의미에서도 알수 있듯이 주로 프로세스를 종료하는 용도로 사용되는 명령어이다. 또한 root는 모든 프로세스에 대하여 kill명령어를 사용할수 있으나 일반사용자들은 자기가 실행시킨 프로세스에 대해서만 kill명령어를 사용할수 있다.

 

kill명령어에서 위의 시그널을 특정프로세스에게 보내고자 할때

시그널번호를 입력해도 되고 시그널이름을 입력해도 된다.

, 특정프로세스를 kill명령어를 이용하여 종료시킬때에는

kill -9 [프로세스] 또는

kill -SIGKILL [프로세스] 둘중 아무거나 사용해도 결국 똑같다.

 

-. 프로세스 재시작(-1,-SIGHUP)

여기서 프로세스재시작은 서비스재시작이 아니다. restart등으로 http를 재시작하는것과는 다른 개념이다.

시그널번호 1번을 옵션으로 주고 프로세스(PID)를 지정하면 해당 프로세스를 재시작하도록 하는 시그널을 보낸다.

kill -1 [pid]

위와 같이 사용하면 된다.

[root@os1 ~]# ps -ef | grep atd

root      2343     1  0 Jan16 ?        00:00:00 /usr/sbin/atd

root      3852  2427  0 04:40 pts/0    00:00:00 grep --color=always atd

[root@os1 ~]# kill -1 2343

[root@os1 ~]# ps -ef | grep atd

root      2343     1  0 Jan16 ?        00:00:00 /usr/sbin/atd

root      3854  2427  0 04:40 pts/0    00:00:00 grep --color=always atd

 

>> killall명령어 <<

killall명령어는 이름에서도 알수 있듯이 특정프로세스를 한번에 죽이는 명령어이다.

killall [프로세스명] 을 으로 사용하게 되면 지저한 프로세스 명을 가진 모든 프로세스가 종료된다.

, httpd데몬이 여러개 실행되어있을경우 모두 종료하고자 한다면 killall httpd를 사용하면 된다.

 

-. killall의 주요 옵션

-i : 프로세스 종료전 물어보기(y,n)

-v : 진행현황 확인

-w : 지정한 프로세스들이 모두 종료될때까지 종료시도를 함

-[signum] : 특정시그널 지정하여 보내기

 

-. 프로세스종료전 확인하기(-i)

killall 명령어에 [-i] 옵션을 사용하면 프로세스를 종료하기전 확인메시지를 물어본다.

y를 입력하면 해당 프로세스가 종료되며, n를 입력하면 종료되지 않는다.

pid값으로 확인을 하기때문에 종료하면 안되는 프로세스는 미리 pid값을 알고 있는것이 좋을것이다.

 

-. killall명령어를 이용한 진행도보기(-v)

killall명령어를 이용하여 특정프로세스들에게 시그널을 보낼때 별다른 출력을 하지 않는다. 이때 -v옵션을 주어 화면에 진행도를 출력하도록 할수 있다.

 

-. 특정시그널 지정하여 보내기(-signum)

kill명령어와 사용했던 방법과 동일하다 -[signum] 인자를 주어 지정한 프로세스들에게 특정 시그널을 보내는것이다.

killall -9 httpd httpd의 프로세스들을 모두 종료하는 명령어이며,

killall -1 httpd httpd의 프로세스들을 모두 재시작하는 명령어이다.

 

kill5명령어란,

killall5 명령어는 SystemV계열의 명령어로서 kernel, threads와 커널소류의 세션프로세스를 제외한 시스템의 모든 프로세스에게 특정시그널을 보내는 명령어이다.

따라서 이 명령어로 SIGKILL시그널을 보내게 되면 시스템의 모든 프로세스에게 종료시그널을 보내게 되므로 시스템이 종료된다.

또한 이 명령어는 특정프로세스를 지정할수 없다.

이 명령어를 통해 시스템을 종료시키는건 정상적인 종료가 아니기때문에 함부로 실행해선 안된다.

 

 

참조 : 리눅스 서버관리 실무 바이블 3.0(박성수 저)

'OS' 카테고리의 다른 글

[리눅스] 방화벽 iptables 설정  (0) 2016.04.05
[리눅스] 시간 자동 동기화  (0) 2015.11.09
[apache] 자동재시작  (0) 2015.09.26
[apache] Prefork와 Worker 설정  (0) 2015.09.23
[아파치] 최적화  (0) 2015.09.22
Posted by 꼬장e
,