linux之kill命令詳解
本文源自:
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) - 沒有那個過程
三、kill signal
01 |
$
kill
-l |
02 |
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL |
03 |
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE |
04 |
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 |
05 |
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT |
06 |
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP |
07 |
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU |
08 |
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH |
09 |
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN |
10 |
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 |
11 |
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 |
12 |
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 |
13 |
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 |
14 |
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 |
15 |
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 |
16 |
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 |
17 |
63) SIGRTMAX-1 64) SIGRTMAX |
列表中,編號為1 ~ 31的訊號為傳統UNIX支援的訊號,是不可靠訊號(非實時的),編號為32 ~ 63的訊號是後來擴充的,稱做可靠訊號(實時訊號)。不可靠訊號和可靠訊號的區別在於前者不支援排隊,可能會造成訊號丟失,而後者不會。
下面我們對編號小於SIGRTMIN的訊號進行討論。
1) SIGHUP
本訊號在使用者終端連線(正常或非正常)結束時發出, 通常是在終端的控制程式結束時, 通知同一session內的各個作業, 這時它們與控制終端不再關聯。
登入Linux時,系統會分配給登入使用者一個終端(Session)。在這個終端執行的所有程式,包括前臺程式組和後臺程式組,一般都屬於這個 Session。當使用者退出Linux登入時,前臺程式組和後臺有對終端輸出的程式將會收到SIGHUP訊號。這個訊號的預設操作為終止程式,因此前臺進 程組和後臺有終端輸出的程式就會中止。不過可以捕獲這個訊號,比如wget能捕獲SIGHUP訊號,並忽略它,這樣就算退出了Linux登入,wget也 能繼續下載。
此外,對於與終端脫離關係的守護程式,這個訊號用於通知它重新讀取配置檔案。
2) SIGINT
程式終止(interrupt)訊號, 在使用者鍵入INTR字元(通常是Ctrl-C)時發出,用於通知前臺程式組終止程式。
3) SIGQUIT
和SIGINT類似, 但由QUIT字元(通常是Ctrl-)來控制. 程式在因收到SIGQUIT退出時會產生core檔案, 在這個意義上類似於一個程式錯誤訊號。
4) SIGILL
執行了非法指令. 通常是因為可執行檔案本身出現錯誤, 或者試圖執行資料段. 堆疊溢位時也有可能產生這個訊號。
5) SIGTRAP
由斷點指令或其它trap指令產生. 由debugger使用。
6) SIGABRT
呼叫abort函式生成的訊號。
7) SIGBUS
非法地址, 包括記憶體地址對齊(alignment)出錯。比如訪問一個四個字長的整數, 但其地址不是4的倍數。它與SIGSEGV的區別在於後者是由於對合法儲存地址的非法訪問觸發的(如訪問不屬於自己儲存空間或只讀儲存空間)。
8) SIGFPE
在發生致命的算術運算錯誤時發出. 不僅包括浮點運算錯誤, 還包括溢位及除數為0等其它所有的算術的錯誤。
9) SIGKILL
用來立即結束程式的執行. 本訊號不能被阻塞、處理和忽略。如果管理員發現某個程式終止不了,可嘗試傳送這個訊號。
10) SIGUSR1
留給使用者使用
11) SIGSEGV
試圖訪問未分配給自己的記憶體, 或試圖往沒有寫許可權的記憶體地址寫資料.
12) SIGUSR2
留給使用者使用
13) SIGPIPE
管道破裂。這個訊號通常在程式間通訊產生,比如採用FIFO(管道)通訊的兩個程式,讀管道沒開啟或者意外終止就往管道寫,寫程式會收到SIGPIPE訊號。此外用Socket通訊的兩個程式,寫程式在寫Socket的時候,讀程式已經終止。
14) SIGALRM
時鐘定時訊號, 計算的是實際的時間或時鐘時間. alarm函式使用該訊號.
15) SIGTERM
程式結束(terminate)訊號, 與SIGKILL不同的是該訊號可以被阻塞和處理。通常用來要求程式自己正常退出,shell命令kill預設產生這個訊號。如果程式終止不了,我們才會嘗試SIGKILL。
17) SIGCHLD
子程式結束時, 父程式會收到這個訊號。
如果父程式沒有處理這個訊號,也沒有等待(wait)子程式,子程式雖然終止,但是還會在核心程式表中佔有表項,這時的子程式稱為殭屍程式。這種情 況我們應該避免(父程式或者忽略SIGCHILD訊號,或者捕捉它,或者wait它派生的子程式,或者父程式先終止,這時子程式的終止自動由init程式來接管)。
18) SIGCONT
讓一個停止(stopped)的程式繼續執行. 本訊號不能被阻塞. 可以用一個handler來讓程式在由stopped狀態變為繼續執行時完成特定的工作. 例如, 重新顯示提示符...
19) SIGSTOP
停止(stopped)程式的執行. 注意它和terminate以及interrupt的區別:該程式還未結束, 只是暫停執行. 本訊號不能被阻塞, 處理或忽略.
20) SIGTSTP
停止程式的執行, 但該訊號可以被處理和忽略. 使用者鍵入SUSP字元時(通常是Ctrl-Z)發出這個訊號
21) SIGTTIN
當後臺作業要從使用者終端讀資料時, 該作業中的所有程式會收到SIGTTIN訊號. 預設時這些程式會停止執行.
22) SIGTTOU
類似於SIGTTIN, 但在寫終端(或修改終端模式)時收到.
23) SIGURG
有"緊急"資料或out-of-band資料到達socket時產生.
24) SIGXCPU
超過CPU時間資源限制. 這個限制可以由getrlimit/setrlimit來讀取/改變。
25) SIGXFSZ
當程式企圖擴大檔案以至於超過檔案大小資源限制。
26) SIGVTALRM
虛擬時鐘訊號. 類似於SIGALRM, 但是計算的是該程式佔用的CPU時間.
27) SIGPROF
類似於SIGALRM/SIGVTALRM, 但包括該程式用的CPU時間以及系統呼叫的時間.
28) SIGWINCH
視窗大小改變時發出.
29) SIGIO
檔案描述符準備就緒, 可以開始進行輸入/輸出操作.
30) SIGPWR
Power failure
31) SIGSYS
非法的系統呼叫。
在以上列出的訊號中, 程式不可捕獲、阻塞或忽略的訊號有:SIGKILL,SIGSTOP
不能恢復至預設動作的訊號有:SIGILL,SIGTRAP
預設會導致程式流產的訊號有:SIGABRT,SIGBUS,SIGFPE,SIGILL,SIGIOT,SIGQUIT,SIGSEGV,SIGTRAP,SIGXCPU,SIGXFSZ
預設會導致程式退出的訊號有:SIGALRM,SIGHUP,SIGINT,SIGKILL,SIGPIPE,SIGPOLL,SIGPROF,SIGSYS,SIGTERM,SIGUSR1,SIGUSR2,SIGVTALRM
預設會導致程式停止的訊號有:SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU
預設程式忽略的訊號有:SIGCHLD,SIGPWR,SIGURG,SIGWINCH
此外,SIGIO在SVR4是退出,在4.3BSD中是忽略;SIGCONT在程式掛起時是繼續,否則是忽略,不能被阻塞。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8484829/viewspace-2675044/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux下 netstat ps kill 命令詳解及常用命令收集Linux
- 【linux】kill命令模板Linux
- 精通 Linux 的 “kill” 命令Linux
- Linux 常用命令之 top 命令詳解Linux
- Linux重要命之sed命令詳解Linux
- Linux學習之iostat命令詳解LinuxiOS
- Linux at命令詳解Linux
- Linux 解壓zip檔案詳解之unzip命令!Linux
- percona-tools 之 pt-kill 引數詳解
- linux top 命令詳解Linux
- linux命令詳解:sortLinux
- linux top命令詳解Linux
- Linux screen 命令詳解Linux
- Linux find 命令詳解Linux
- Linux xargs 命令詳解Linux
- Linux sed 命令詳解Linux
- Linux awk 命令詳解Linux
- Linux iptables 命令詳解Linux
- Linux xattr 命令詳解Linux
- Linux locate 命令詳解Linux
- Linux netstat 命令詳解Linux
- Linux firewalld 命令詳解Linux
- Linux ss 命令詳解Linux
- Linux nc 命令詳解Linux
- Linux history 命令詳解Linux
- Linux sort 命令詳解Linux
- Linux diff命令詳解Linux
- 詳解Linux chkconfig命令Linux
- Linux chattr命令詳解Linux
- Linux命令top詳解Linux
- Linux umask 命令詳解Linux
- Linux的scp命令詳解Linux
- Linux下 ln 命令詳解Linux
- Linux中awk命令詳解Linux
- linux的zip命令詳解Linux
- Linux中DD命令詳解Linux
- 【Linux】命令expect使用詳解Linux
- Linux基礎命令詳解Linux