Linux命令kill和signal


 

kill命令用於終止指定的進程(terminate a process),是Unix/Linux下進程管理的常用命令。通常,我們在需要終止某個或某些進程時,先使用ps/pidof/pstree/top等工具獲取進程PID,然后使用kill命令來殺掉該進程。kill命令的另外一個用途就是向指定的進程或進程組發送信號(The  command kill sends the specified signal to the specified process or process group),或者確定進程號為PID的進程是否還在。比如,有許多程序都把SIGHUP信號作為重新讀取配置文件的觸發條件。

一 常用參數
格式:kill <pid>
格式:kill -TERM <pid>
發送SIGTERM信號到指定進程,如果進程沒有捕獲該信號,則進程終止(If no signal is specified, the TERM signal is sent.  The TERM signal will kill processes which do not catch this signal.)

 

格式:kill -l
列出所有信號名稱(Print a list of signal names.  These are found in /usr/include/linux/signal.h)。只有第9種信號(SIGKILL)才可以無條件終止進程,其他信號進程都有權利忽略。下面是常用的信號:
HUP     1    終端斷線
INT       2    中斷(同 Ctrl + C)
QUIT    3    退出(同 Ctrl + \)
TERM    15    終止
KILL      9    強制終止
CONT   18    繼續(與STOP相反, fg/bg命令)
STOP    19    暫停(同 Ctrl + Z)
格式:kill -l <signame>
顯示指定信號的數值。
 
格式:kill -9 <pid>
格式:kill -KILL <pid>
強制殺掉指定進程,無條件終止指定進程。
 
格式:kill %<jobid>
格式:kill -9 %<jobid>
殺掉指定的任務(使用jobs命令可以列出)

 

格式:kill -QUIT <pid>
格式:kill -3 <pid>
使得程序正常的退出。

 

killall命令 
killall命令殺死同一進程組內的所有進程。其允許指定要終止的進程的名稱,而非PID。 
# killall httpd  

 

二 示例
1)先用ps查找進程,然后用kill殺掉。
[root@new55 ~]# ps -ef|grep vim 
root      3368  2884  0 16:21 pts/1    00:00:00 vim install.log
root      3370  2822  0 16:21 pts/0    00:00:00 grep vim
[root@new55 ~]# kill 3368 
[root@new55 ~]# kill 3368 
-bash: kill: (3368) - 沒有那個進程
 
2)init進程是不可殺的。
3)列出所有信號名稱
[root@new55 ~]# 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
[root@new55 ~]#

 

/usr/include/linux/signal.h 寫道
#define SIGHUP 1
#define SIGINT 2
#define SIGQUIT 3
#define SIGILL 4
#define SIGTRAP 5
#define SIGABRT 6
#define SIGIOT 6
#define SIGBUS 7
#define SIGFPE 8
#define SIGKILL 9
#define SIGUSR1 10
#define SIGSEGV 11
#define SIGUSR2 12
#define SIGPIPE 13
#define SIGALRM 14
#define SIGTERM 15
#define SIGSTKFLT 16
#define SIGCHLD 17
#define SIGCONT 18
#define SIGSTOP 19
#define SIGTSTP 20
#define SIGTTIN 21
#define SIGTTOU 22
#define SIGURG 23
#define SIGXCPU 24
#define SIGXFSZ 25
#define SIGVTALRM 26
#define SIGPROF 27
#define SIGWINCH 28
#define SIGIO 29
#define SIGPOLL SIGIO
/*
#define SIGLOST 29
*/
#define SIGPWR 30
#define SIGSYS 31
#define SIGUNUSED 31
/* These should not be considered constants from userland. */
#define SIGRTMIN 32
#define SIGRTMAX _NSIG

 

參考:
http://codingstandards.iteye.com/blog/847299

 

完! 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM