[b] Linux中的kill命令用來終止指定的進程(terminate a process)的運行。 kill可將指定的信息送至程序。預設的信息為SIGTERM(15),可將指定程序終止。[/b]
[b] (1)用法:[/b]
[b] 用法: kill [選項] 參數[/b]
參數指的是進程或作業識別號,指定要刪除的進程或作業。
[b] (2)功能:[/b]
[b] 功能: 發送指定的信號到相應進程。不指定型號將發送SIGTERM(15)終止指定進程 。[/b]
若仍無法終止該程序,可使用SIGKILL(9)信息嘗試強制刪除程序。程序或工作的編號可利用ps指令或job指令查看。
root用戶將影響用戶的進程,非root用戶只能影響自己的進程。 [b] (3)選項參數:[/b]
1) -a: 當處理當前進程時,不限制命令名和進程號的對應關系 2) -l <信息編號>: 若不加<信息編號>選項,則-l參數會列出全部的信息名稱 3) -p: 指定kill 命令只打印相關進程的進程號,而不發送任何信號 4) -s <信息名稱或編號>: 指定要送出的信息
[b] (4)實例:[/b]
1)[sunjimeng@localhost ~]$ kill -l 列出所有的信號[sunjimeng@localhost ~]$ 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
只有第9種信號(SIGKILL)才可以無條件終止進程,其他信號進程都有權利忽略,下面是常用的信號:HUP 1 終端斷線
INT 2 中斷(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 終止
KILL 9 強制終止
CONT 18 繼續(與STOP相反, fg/bg命令)
STOP 19 暫停(同 Ctrl + Z)
2)[sunjimeng@localhost ~]$ kill 3429 查找並刪除命令
[sunjimeng@localhost ~]$ ps -ef |grep "/usr/bin/seapplet"
sunjime+ 3429 2990 0 16:36 ? 00:00:00 /usr/bin/seapplet
sunjime+ 12918 11465 0 22:16 pts/0 00:00:00 grep --color=auto /usr/bin/seapplet
[sunjimeng@localhost ~]$ kill 3429
[sunjimeng@localhost ~]$ kill 12918
bash: kill: (12918) - 沒有那個進程
[sunjimeng@localhost ~]$ kill 3429
bash: kill: (3429) - 沒有那個進程
[sunjimeng@localhost ~]$ ps -ef |grep "/usr/bin/seapplet"
sunjime+ 12932 11465 0 22:17 pts/0 00:00:00 grep --color=auto /usr/bin/seapplet
注意在測試時盡量不要刪除root的進程。 3)[sunjimeng@localhost ~]$ kill -l KILL 顯示指定信號的數值[sunjimeng@localhost ~]$ kill -l KILL
9
[sunjimeng@localhost ~]$ kill -l TERM
15
4)[sunjimeng@localhost ~]$ kill -9 $(ps -ef |grep sunjimeng) 刪除指定用戶的所有進程
[sunjimeng@localhost ~]$ kill -u sunjimeng
bash: kill: u: 無效的信號聲明
-u參數不能用了。刪除指定用戶的所有進程用下面的命令: [sunjimeng@localhost ~]$ kill -9 $(ps -ef |grep sunjimeng)
5)[sunjimeng@localhost ~]$ kill -9 1 殺死init進程[sunjimeng@localhost ~]$ kill -9 1
bash: kill: (1) - 不允許的操作
[sunjimeng@localhost ~]$
init是Linux系統操作中不可缺少的程序之一。所謂的init進程,它是一個由內核啟動的用戶級進程。內核自行啟動(已經被載入內存,開始運行,並已初始化所有的設備驅動程序和數據結構等)之後,就通過啟動一個用戶級程序init的方式,完成引導進程。所以,init始終是第一個進程(其進程編號始終為1)。 其它所有進程都是init進程的子孫。init進程是不可殺的![b] (5)其他:[/b]
Linux進程的管理:
進程是Linux系統中一個非常重要的概念。Linux是一個多任務的操作系統,系統上經常同時運行著多個進程。我們不關心這些進程究竟是如何分配的,或者是內核如何管理分配時間片的,所關心的是如何去控制這些進程,讓它們能夠很好地為用戶服務。 Linux操作系統包括三種不同類型的進程,每種進程都有自己的特點和屬性。 1)交互進程是由一個Shell啟動的進程。交互進程既可以在前台運行,也可以在後台運行。 2)批處理進程和終端沒有聯系,是一個進程序列。 3)監控進程(也稱系統守護進程)時Linux系統啟動時啟動的進程,並在後台運行。例如,httpd是著名的Apache服務器的監控進程。 kill命令的工作原理是:
向Linux系統的內核發送一個系統操作信號和某個程序的進程標識號,然後系統內核就可以對進程標識號指定的進程進行操作。比如在top命令中,我們看到系統運行許多進程,有時就需要使用kill中止某些進程來提高系統資源。在講解安裝和登陸命令時,曾提到系統多個虛擬控制台的作用是當一個程序出錯造成系統死鎖時,可以切換到其它虛擬控制台工作關閉這個程序。此時使用的命令就是kill,因為kill是大多數Shell內部命令可以直接調用的。