Linux命令之kill


kill [-s signal | -p] [ --] pid…

kill –l [signal]

  終止指定進程。命令kill將指定的信號發送到指定的進程或進程組。如果沒有指定信號,則發送SIGTERM信號。SIGTERM信號將終止不捕獲該信號的進程。對於其他進程,可能需要使用kill(9)信號,因此此信號無法捕獲。

  如今大所述shell都有內置的kill函數,其用法與此描述的命令非常相似。’-a’和’-p’選項以及通過命令名指定pids的可能性是本地擴展。

  如果sig為0,呢不發送任何信號,但人會執行錯誤檢測。

(1).選項

pid… 指定kill應該放出信號的進程列表。每個pid可以是以下五個之一:

  n 其中n大於0。發出信號給pid為n的進程

  0 發信號通知當前進程組中的所有進程

  -1 發信號給pid大於1的所有進程

  -n 其中n大於1。發送信號給進程組n中所有進程。當給出一個形式為-n的參數時,它表示一個進程組,而且必須首先指定信號,或者該參數前面必須是--選項,否則它將被視為發送的信號。

  commandname 發送信號給使用該名稱調用的所有進程

-s signal 指定要發送的信號,信號可以是信號名稱或數字。
-l 打印型號名稱列表。可以在/usr/include/linux/signal.h中找到
-a 當處理進程時,不限制命令名和進程號的對應關系
-p 指定kill只打印指定進程的進程ID(pid),而不發送任何信號。

(2).實例

  列出所有信息,kill -l

[root@CentOS6 桌面]# 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)才可以無條件終止進程,其他信號進程都有權利忽略,下面是常用的信號:

SIGHUP      1 終端斷線 
SIGINT      2 中斷(同 Ctrl + C) 
SIGQUIT     3 退出(同 Ctrl + \) 
SIGKILL     9 強制終止 
SIGTERM    15 終止(正常結束) ,缺省信號
SIGCONT    18 繼續(同fg/bg命令) 
SIGSTOP    19 停止
SIGTSTP    20 暫停(同 Ctrl + Z)

  顯示指定信號的數值,可以看到有沒有前綴SIG並沒有影響

[xf@xuexi ~]$ kill -l SIGKILL
9
[xf@xuexi ~]$ kill -l KILL
9
[xf@xuexi ~]$ kill -l SIGTERM
15
[xf@xuexi ~]$ kill -l TERM
15

  注意:init是Linux系統操作中不可缺少的程序之一。所謂的init進程,它是一個由內核啟動的用戶級進程。內核自行啟動(已經被載入內存,開始運行,並已初始化所有的設備驅動程序和數據結構等)之后,就通過啟動一個用戶級程序init的方式,完成引導進程。所以,init始終是第一個進程(其進程編號始終為1)。 其它所有進程都是init進程的子孫。init進程是不可殺的!

(3).其他

Linux進程的管理:

  進程是Linux系統中一個非常重要的概念。Linux是一個多任務的操作系統,系統上經常同時運行多個進程。我們不關心這些進程是如何分配的,或者是內核如何管理分配時間片的,所關系的只是如何去控制這些進程,讓它們更好的為用戶服務。

  Linux操作系統包括三種不同類型的進程,每種進程都有自己的特點和屬性。

1)交互進程是由一個Shell啟動的進程。交互進程既可以在前台運行,也可以在后台運行

2)批處理進程和終端沒有聯系,是一個進程序列。

3)監控進程(也稱系統守護進程)是Linux系統啟動時啟動的進程,並且在后台運行。例如,httpd是著名的Apache服務器的監控進程。

Kill命令工作原理:

  向Linux內核發送一個系統操作信號和摸個程序的進程標識號,然后系統內核就可以對進程標識號指定的進程進行操作。比如在top命令中,我們可以看到系統運行許多進程,有時就需要使用kill中止默寫進程來提高系統資源。在講解安裝和登錄命令時,曾提到系統多個虛擬控制台的作用是當一個程序出錯造成系統鎖死時,可以切換到其他虛擬控制台關閉這個程序。此時使用的命令就是kill,因為kill是大多數Shell內部命令可以直接調用的。


免責聲明!

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



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