歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> RHEL6系統進程管理之四進程管理kill命令

RHEL6系統進程管理之四進程管理kill命令

日期:2017/2/28 15:31:48   编辑:Linux教程

我們就來看看RHEL6系統進程的管理了
我們知道,一般程序本身都會帶自身的管理程序,如關閉、重新啟動。除了自帶的,我們也可以通過發信號的方式來告訴程序需要做什麼,這就是下面我們要介紹的內容。

先來了解一下幾個常用的信號

[root@yufei ~]# kill -l
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) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX系統中有這麼多的信號,我們不用管他,只要來了解幾個常用的就OK了,如果想仔細的研究的朋友,請到網上找相應的內容,或者是查看signal的幫助(man 7 signal 如果沒有此命令,請安裝man-pages軟件包)。

1 SIGHUP 啟動被終止的程序,可讓該 PID 重新讀取自己的配置文件,類似重新啟動

2 SIGINT 相當於用鍵盤輸入 ctrl+c 來中斷一個程序

9 SIGKILL 代表強制停止一個程序的進行,如果該程序進行到一半, 那麼尚未完成的部分可能會有『半產品』產生,類似 vim會有 .filename.swp 保留下來

15 SIGTERM 以正常的結束程序來終止該程序。由於是正常的終止,所以後續的動作會將他完成。不過,如果該程序已經發生問題,就是無法使用正常的方法終止時, 輸入這個 signal 也是沒有用的。

17 SIGSTOP 相當於用鍵盤輸入 ctrl+z 來暫停一個程序

上面的數字是信號代碼,而SIG*就是信號,這兩個是等同的哦。

進程管理命令kill,killall,pkill,xkill詳解
那麼我們如何傳送一個信號給某個進程呢?就要通過 kill 、killall、pkill、xkill了。下面就來看看他們是如何使用的。

kill的應用是和ps 或pgrep 命令結合在一起使用的;

kill 的用法:

kill [信號][信號代碼] 進程ID

注意:信號或信號代碼只要用一個就OK了。

[root@yufei ~]# ps auxf |grep httpd
root 3890 0.0 0.3 103228 864 pts/0 S+ 22:25 0:00 \_ grep httpd
root 3879 0.5 4.1 281892 10220 ? Ss 22:25 0:00 /usr/sbin/httpd
apache 3881 0.0 2.2 281892 5548 ? S 22:25 0:00 \_ /usr/sbin/httpd
apache 3882 0.0 2.2 281892 5548 ? S 22:25 0:00 \_ /usr/sbin/httpd
apache 3883 0.0 2.2 281892 5548 ? S 22:25 0:00 \_ /usr/sbin/httpd
apache 3884 0.0 2.2 281892 5548 ? S 22:25 0:00 \_ /usr/sbin/httpd
apache 3885 0.0 2.2 281892 5548 ? S 22:25 0:00 \_ /usr/sbin/httpd
apache 3886 0.0 2.2 281892 5548 ? S 22:25 0:00 \_ /usr/sbin/httpd
apache 3887 0.0 2.2 281892 5548 ? S 22:25 0:00 \_ /usr/sbin/httpd
apache 3888 0.0 2.2 281892 5548 ? S 22:25 0:00 \_ /usr/sbin/httpd

第二列就是進程的ID了,而3879 我們可以明顯的看出來他是httpd服務器的父進程,從3881到3888是httpd服務器的子進程了,如果殺死子進程,只是針對自己起作用。

[root@yufei ~]# kill -15 3888
[root@yufei ~]# ps auxf |grep httpd
root 3893 0.0 0.3 103228 864 pts/0 S+ 22:28 0:00 \_ grep httpd
root 3879 0.0 4.1 281892 10220 ? Ss 22:25 0:00 /usr/sbin/httpd
apache 3881 0.0 2.2 281892 5548 ? S 22:25 0:00 \_ /usr/sbin/httpd
apache 3882 0.0 2.2 281892 5548 ? S 22:25 0:00 \_ /usr/sbin/httpd
apache 3883 0.0 2.2 281892 5548 ? S 22:25 0:00 \_ /usr/sbin/httpd
apache 3884 0.0 2.2 281892 5548 ? S 22:25 0:00 \_ /usr/sbin/httpd
apache 3885 0.0 2.2 281892 5548 ? S 22:25 0:00 \_ /usr/sbin/httpd
apache 3886 0.0 2.2 281892 5548 ? S 22:25 0:00 \_ /usr/sbin/httpd
apache 3887 0.0 2.2 281892 5548 ? S 22:25 0:00 \_ /usr/sbin/httpd

3888這個進程沒有了

而如果殺死父進程,那麼所有的子進程也就完了

[root@yufei ~]# kill -15 3879
[root@yufei ~]# ps auxf |grep httpd
root 3895 0.0 0.0 2644 168 pts/0 D+ 22:29 0:00 \_ grep httpd

我們再啟動httpd服務

[root@yufei ~]# service httpd start
Starting httpd: [ OK ]

[root@yufei ~]# ps auxf |grep httpd
root 3920 0.0 0.3 103228 860 pts/0 S+ 22:30 0:00 \_ grep httpd
root 3909 0.2 4.1 281892 10220 ? Ss 22:30 0:00 /usr/sbin/httpd
apache 3911 0.0 2.2 281892 5548 ? S 22:30 0:00 \_ /usr/sbin/httpd
apache 3912 0.0 2.2 281892 5548 ? S 22:30 0:00 \_ /usr/sbin/httpd
apache 3913 0.0 2.2 281892 5548 ? S 22:30 0:00 \_ /usr/sbin/httpd
apache 3914 0.0 2.2 281892 5548 ? S 22:30 0:00 \_ /usr/sbin/httpd
apache 3915 0.0 2.2 281892 5548 ? S 22:30 0:00 \_ /usr/sbin/httpd
apache 3916 0.0 2.2 281892 5548 ? S 22:30 0:00 \_ /usr/sbin/httpd
apache 3917 0.0 2.2 281892 5548 ? S 22:30 0:00 \_ /usr/sbin/httpd
apache 3918 0.0 2.2 281892 5548 ? S 22:30 0:00 \_ /usr/sbin/httpd
[root@yufei ~]# kill -1 3909

Copyright © Linux教程網 All Rights Reserved