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信號做爲從新讀取配置文件的觸發條件。 linux
在Bash中,kill命令是個Shell內建命令,爲何呢?緣由有兩個:第一個緣由,Bash能夠進行任務管理(&,Ctrl+Z,bg,fg,kill %jobid等指令),若是kill只是一個外部命令,那麼在須要終止某個任務時就會很難辦,由於任務是與終端關聯的,反過來,若是kill命令是shell內建命令,就能夠很方便的採用kill %jobid的形式去殺掉指定任務(彷佛這個緣由還不是很充分);第二個緣由,是更加劇要的,若是要殺掉某個進程還得來啓動一個名爲kill的子進程,那麼在達到容許建立的進程數量上限時,連kill進程自己都沒法建立了,還怎麼來殺掉其餘進程呢!(Kill is a shell builtin for two reasons: it allows job IDs to be used instead of process IDs, and, if you have reached the limit on processes that you can create, you don't have to start a process to kill another one.) shell
格式:kill <pid> vim
格式:kill -TERM <pid> bash
發送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 ide
列出全部信號名稱(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) ui
格式:kill -l <signame> this
顯示指定信號的數值。 spa
格式:kill -9 <pid>
格式:kill -KILL <pid>
強制殺掉指定進程,無條件終止指定進程。
格式:kill %<jobid>
格式:kill -9 %<jobid>
殺掉指定的任務(使用jobs命令能夠列出)
[root@new55 ~]# type -a kill
kill is a shell builtin
kill is /bin/kill
kill is /usr/bin/kill
[root@new55 ~]# help kill
kill: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
Send the processes named by PID (or JOBSPEC) the signal SIGSPEC. If
SIGSPEC is not present, then SIGTERM is assumed. An argument of `-l'
lists the signal names; if arguments follow `-l' they are assumed to
be signal numbers for which names should be listed. Kill is a shell
builtin for two reasons: it allows job IDs to be used instead of
process IDs, and, if you have reached the limit on processes that
you can create, you don't have to start a process to kill another one.
[root@new55 ~]#
[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 ~]#
[root@new55 ~]# kill -l KILL
9
[root@new55 ~]# kill -l SIGKILL
9
[root@new55 ~]# kill -l TERM
15
[root@new55 ~]# kill -l SIGTERM
15
[root@new55 ~]#
init是Linux系統操做中不可缺乏的程序之一。所謂的init進程,它是一個由內核啓動的用戶級進程。內核自行啓動(已經被載入內存,開始運行,並已初始化全部的設備驅動程序和數據結構等)以後,就經過啓動一個用戶級程序init的方式,完成引導進程。因此,init始終是第一個進程(其進程編號始終爲1)。 其它全部進程都是init進程的子孫。
[root@new55 ~]# kill -HUP 1
[root@new55 ~]# kill -9 1
[root@new55 ~]# kill -KILL 1
系統依然在運行。
[root@new55 ~]#
[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) - 沒有那個進程
[root@new55 ~]#
[root@new55 ~]# tail -f install.log
瀹夎 scim-bridge-gtk-0.4.5-9.el5.i386
瀹夎 scim-pinyin-0.5.91-16.el5.i386
瀹夎 scim-chewing-0.3.1-11.el5.i386
瀹夎 scim-chinese-standard-0.0.2-1.el5.i386
瀹夎 scim-tables-0.5.6-7.i386
瀹夎 scim-qtimm-0.9.4-5.i386
瀹夎 scim-tables-chinese-0.5.6-7.i386
瀹夎 fonts-chinese-3.02-12.el5.noarch
瀹夎 isdn4k-utils-3.2-56.el5.i386
瀹夎 stardict-2.4.5-5.i386
Ctrl+Z
[1]+ Stopped tail -f install.log
[root@new55 ~]# kill %1
[root@new55 ~]# kill %1 -bash: kill: (3379) - 沒有那個進程 [1]+ 已終止 tail -f install.log [root@new55 ~]#