1. 程式人生 > >linux kill命令引數及用法詳解--linux終止程序命令

linux kill命令引數及用法詳解--linux終止程序命令

Linux kill 命令使用詳解

功能說明:刪除執行中的程式或工作。

語  法:kill [-s <資訊名稱或編號>][程式] 或 kill [-l <資訊編號>]

補充說明:kill可將指定的資訊送至程式。預設的資訊為SIGTERM(15),可將指定程式終止。若仍無法終止該程式,可使用SIGKILL(9)資訊嘗試強制刪除程式。程式或工作的編號可利用ps指令或jobs指令檢視。參  數:         -l <資訊編號 若不加<資訊編號>選項,則-l引數會列出全部的資訊名稱。         -s <資訊名稱或編號 指定要送出的資訊。

        [程式[程式]可以是程式的PID或是PGID,也可以是工作編號。

kill命令可以從kill這個詞來大致瞭解下它的作用,是的,它用來殺死(kill)一個程序。下面是kill命令的詳解。

1.作用
kill
命令用來中止一個程序。

2.格式
kill [
s signal | p ] [ a ] pid… 
kill
l [ signal ]

3.引數s:指定傳送的訊號。p:模擬傳送訊號。l:指定訊號的名稱列表。
pid
:要中止程序的ID號。
Signal
:表示訊號。

4.說明

程序是Linux系統中一個非常重要的概念。Linux是一個多工的作業系統,系統上經常同時執行著多個程序。我們不關心這些程序究竟是如何分配的,或者是核心如何管理分配時間片的,所關心的是如何去控制這些程序,讓它們能夠很好地為使用者服務。

Linux作業系統包括三種不同型別的程序,每種程序都有自己的特點和屬性。互動程序是由一個Shell啟動的程序。互動程序既可以在前臺執行,也可以在後臺執行。批處理程序和終端沒有聯絡,是一個程序序列。監控程序(也稱系統守護程序)Linux系統啟動時啟動的程序,並在後臺執行。例如,httpd是著名的Apache伺服器的監控程序。

kill命令的工作原理是,向Linux系統的核心傳送一個系統操作訊號和某個程式的程序標識號,然後系統核心就可以對程序標識號指定的程序進行操作。比如在top命令中,我們看到系統執行許多程序,有時就需要使用kill中止某些程序來提高系統資源。在講解安裝和登陸命令時,曾提到系統多個虛擬控制檯的作用是當一個程式出錯造成系統死鎖時,可以切換到其它虛擬控制檯工作關閉這個程式。此時使用的命令就是

kill,因為kill是大多數Shell內部命令可以直接呼叫的。

應用例項一:1)強行中止(經常使用殺掉)一個程序標識號為324的程序:kill 9 324

2)解除Linux系統的死鎖Linux中有時會發生這樣一種情況:一個程式崩潰,並且處於死鎖的狀態。此時一般不用重新啟動計算機,只需要中止(或者說是關閉)這個有問題的程式即可。當kill處於X-Window介面時,主要的程式(除了崩潰的程式之外)一般都已經正常啟動了。此時開啟一個終端,在那裡中止有問題的程式。比如,如果Mozilla瀏覽器程式出現了鎖死的情況,可以使用kill命令來中止所有包含有Mozolla瀏覽器的程式。首先用top命令查處該程式的PID,然後使用kill命令停止這個程式:kill SIGKILL XXX
其中,XXX是包含有Mozolla瀏覽器的程式的程序標識號。

3)使用命令回收記憶體我們知道記憶體對於系統是非常重要的,回收記憶體可以提高系統資源。kill命令可以及時地中止一些越軌的程式或很長時間沒有相應的程式。例如,使用top命令發現一個無用 (Zombie) 的程序,此時可以使用下面命令:kill 9 XXX
其中,XXX是無用的程序標識號。

然後使用下面命令:free 
此時會發現可用記憶體容量增加了。

4killall命令
Linux
下還提供了一個killall命令,可以直接使用程序的名字而不是程序標識號,例如: killall -HUP inetd

應用例項二:

在執行一條find指令時由於時間過長,決定終止該程序。首先應該使用ps命令來檢視該程序對應的PID,鍵入ps,顯示如下:
PID TTY TIME COMMAND
285 1 00:00:00 -bash
287 3 00:00:00 -bash
289 5 00:00:00 /sbin/mingetty
tty5
290 6 00:00:00 /sbin/mingetty tty6
312 3 00:00:00 telnetbbs3
341 4 00:00:00 /sbin/mingetty tty4
345 1 00:00:00 find / -name foxy.jpg
348 1 00:00:00 ps
可以看到該程序對應的PID345,現在使用kill命令來終止該程序。鍵入:
# kill 345
再用ps命令檢視,就可以看到,find程序已經被殺掉了。
[
25] 殺掉程序11721
# ps PID TTY TIME COMMAND
11668 p1 00:00:00 -tcsh
11721 p1 00:00:00
cat
11737 p1 00:00:00 ps
# kill 11721
[1] Terminated cat
 

kill 訊號列表

$ 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

列表中,編號為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
17) SIGCHLD
如果父程序沒有處理這個訊號,也沒有等待(wait)子程序,子程序雖然終止,但是還會在核心程序表中佔有表項,這時的子程序稱為殭屍程序。這種情況我們應該避免(父程序或者忽略SIGCHILD訊號,或者捕捉它,或者wait它派生的子程序,或者父程序先終止,這時子程序的終止自動由init程序來接管)

讓一個停止(stopped)的程序繼續執行. 本訊號不能被阻塞. 可以用一個handler來讓程式在由stopped狀態變為繼續執行時完成特定的工作. 例如, 重新顯示提示符...

停止(stopped)程序的執行. 注意它和terminate以及interrupt的區別:該程序還未結束, 只是暫停執行. 本訊號不能被阻塞, 處理或忽略.

停止程序的執行, 但該訊號可以被處理和忽略. 使用者鍵入SUSP字元時(通常是Ctrl-Z)發出這個訊號

當後臺作業要從使用者終端讀資料時, 該作業中的所有程序會收到SIGTTIN訊號. 預設時這些程序會停止執行.

類似於SIGTTIN, 但在寫終端(或修改終端模式)時收到.

"緊急"資料或out-of-band資料到達socket時產生.

超過CPU時間資源限制. 這個限制可以由getrlimit/setrlimit來讀取/改變。

當程序企圖擴大檔案以至於超過檔案大小資源限制。

虛擬時鐘訊號. 類似於SIGALRM, 但是計算的是該程序佔用的CPU時間.

類似於SIGALRM/SIGVTALRM, 但包括該程序用的CPU時間以及系統呼叫的時間.

視窗大小改變時發出.

檔案描述符準備就緒, 可以開始進行輸入/輸出操作.

Power failure

非法的系統呼叫。

不能恢復至預設動作的訊號有:SIGILL,SIGTRAP
預設會導致程序退出的訊號有:SIGALRM,SIGHUP,SIGINT,SIGKILL,SIGPIPE,SIGPOLL,SIGPROF,SIGSYS,SIGTERM,SIGUSR1,SIGUSR2,SIGVTALRM
預設程序忽略的訊號有:SIGCHLD,SIGPWR,SIGURG,SIGWINCH

<p style="margin: 0cm 0cm 5.75pt; text-indent: 24pt; line-height: 14.4pt; background-color: rgb(245, 250, 255); -webkit-text-size-adjust: none; background-position: initial initial; background-repeat: initial initial; " normal;="" "="">此外,SIGIOSVR4是退出,在4.3BSD中是忽略;SIGCONT在程序掛起時是繼續,否則是忽略,不能被阻塞

相關推薦

linux kill命令引數用法--linux終止程序命令

Linux kill 命令使用詳解 功能說明:刪除執行中的程式或工作。 語  法:kill [-s <資訊名稱或編號>][程式] 或 kill [-l <資訊編號>] 補充說明:kill可將指定的資訊送至程式。預設的資訊為SIGTERM(15),可

linux grep命令引數用法---linux管道命令grep

今天為了查詢檔案中某段字元,找了好久,最後成功使用指令: find . -name "*.cpp" |xargs grep -in “get_itemInfo” | grep -v obd_c 找出了自己想要的檔案。(指定cpp結尾的檔案,找出有get_itemInfo字

Linux如何檢視系統當前登入使用者資訊,linux su命令引數用法(linux切換使用者命令)

作為系統管理員,你可能經常會(在某個時候)需要檢視系統中有哪些使用者正在活動。有些時候,你甚至需要知道他(她)們正在做什麼。本文為我們總結了4種檢視系統使用者資訊(通過編號(ID))的方法。 1. 使用w命令檢視登入使用者正在使用的程序資訊 w命令用於顯示已經登入系統的使用

[ARM-Linux開發]linux dmesg命令引數用法(linux顯示開機資訊命令)

功能說明:顯示開機資訊。語  法:dmesg [-cn][-s <緩衝區大小>]補充說明:kernel會將開機資訊儲存在ring buffer中。您若是開機時來不及檢視資訊,可利用dmesg來檢視。開機資訊亦儲存在/var/log目錄中,名稱為dmesg的檔案

Linux set命令引數用法--Linux設定環境變數命令

功能說明:設定shell。 語  法:set [+-abCdefhHklmnpPtuvx] 補充說明:用set 命令可以設定各種shell選項或者列 出shell變數.單個選項設定常用的特性.在某些選項之後-o引數將特殊特性開啟.在某些選項之後使用+o引數將關閉某些特性,不

linux su命令引數用法

linux su 命令 建議大家切換使用者的時候 使用 su - root 這樣,否則可能發現某些命令執行不了 關於su 、su - 及 sudo的區別 請往下看 1.命令作用 su的作用是變更為其它使用者的身份,超級使用者除外,需要鍵入該使用者的

linux telnet命令引數用法

lnet [-8acdEfFKLrx][-b<主機alias.html' target='_blank'>別名>][-e<脫離字元>][-k<域名>][-l<使用者名稱稱>][-n<記錄檔案>][-S<

linux stat命令引數用法

功能說明:顯示inode內容。 語  法:stat [檔案或目錄] 補充說明:stat以文字的格式來顯示inode的內容。 ls 命令及其許多引數提供了一些非常有用的檔案資訊。另一個不太為人所熟知的命令 stat 提供了一些更為有用的資訊。  下面演示瞭如何對可執行檔案“

mkisofs引數用法---linux製作ISO啟動盤命令

最簡單的光碟生成ISO-----------只有-o –v兩個基本引數 [[email protected] home]# ls clamav  guan  guant  iei  simscan  yu [[email protected] home]# mkisofs -o test.

linux mlabel命令引數用法---設定磁碟的標籤

Linux mlabel命令用法詳解命令名稱:mlabel ,使用許可權:所有使用者,使用方式:mlabel [-vcs] drive:[new_label]說明: 本程式可設定磁碟的標籤 (Label)。 如果磁碟上設定過標籤,mlabel 會將他顯示給使用者。如果

linux cp命令參數用法---linux 復制文件命令cp

linux file linux cp命令參數及用法詳解---linux 復制文件命令cp [root@Linux ~]# cp [-adfilprsu] 來源檔(source) 目的檔(destination)[root@linux

Linux命令--ss命令引數使用

  ss是Socket Statistics的縮寫。顧名思義,ss命令可以用來獲取socket統計資訊,它可以顯示和netstat類似的內容。但ss的優勢在於它能夠顯示更多更詳細的有關TCP和連線狀態的資訊,而且比netstat更快速更高效。 一、ss命令的引數如下 Usage: ss [ OPTI

(轉)Linux命令之Ethtool用法

如果 size ram phy 基本設置 速度 終端 網卡驅動 sed Linux命令之Ethtool用法詳解 原文:http://www.linuxidc.com/Linux/2012-01/52669.htm Linux/Unix命令之Ethtool描述:Eth

Linux使用者,組管理命令整理例項

使用者,組 相關檔案: /etc/passwd 使用者相關資訊 /etc/login.defs 設定使用者建立時預設相關資訊 /etc/defualt/useradd 使用者新增時會建立的相關資訊設定 /etc/skel

linux ping命令引數用法

語  法:ping [-dfnqrRv][-c<完成次數>][-i<間隔秒數>][-I<網路介面>][-l<前置載入>][-p<範本樣式>][-s<資料包大小>][-t<存活數值>][主機名

Java Web專案部署至Linux伺服器的步驟問題

        部門接手公司內部需求的一個小專案,從設計到研發自主完成,期間遇到了不少困難。部署過程也是坎坷,特此寫篇文章記錄一下,也為新手們填個坑~高手請跳過~~ 一、部署環境搭建(此步驟參考)      

RxJava2.x的整合用法

目錄 主頁 中文資料 Rxjava是什麼 首先要了解什麼是觀察者 Android 開發中一個比較典型的例子是點選監聽器 OnClickListener 。對設定 OnClickListener 來說, View 是被

Python迭代器定義用法

可迭代物件 在Python中以直接作用於 for 迴圈的資料型別有以下幾種: 一類是集合資料型別,如 list 、 tuple 、 dict 、 set 、 str 等; 一類是 generator ,包括生成器和帶 yield 的generator function。 這些可以直接作

greenDao的基本使用用法

       轉載請標明出去: http://blog.csdn.net/small_and_smallworld   關於資料操作相關的庫有不少,之前有寫過用谷歌官方的一些工具類對資料庫進行操作的demo,工程中需要使用greenDao來對資料庫進行操作,因此寫了個

UNIX /Linux中的memcpy函式用法

原型:extern void *memcpy(void *dest, void *src, unsigned int count); 用法:#include <string.h>