日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

linux 系统kill用法

發(fā)布時(shí)間:2025/3/21 linux 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 系统kill用法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Linux下Kill函數(shù)用法

? (2014-06-24 18:13:17) 轉(zhuǎn)載
標(biāo)簽:?

linux

?

kill函數(shù)

分類(lèi):?Linux-ALL
Linux下Kill函數(shù)用法[ KILL ]功能描述:
用于向任何進(jìn)程組或進(jìn)程發(fā)送信號(hào)。

頭文件用法:?

1?#include?
2?
3?#include?
4?
5?int?kill(pid_t?pid,?int?sig);
6?
7?


參數(shù):?
pid:可能選擇有以下四種

1. pid大于零時(shí),pid是信號(hào)欲送往的進(jìn)程的標(biāo)識(shí)。
2. pid等于零時(shí),信號(hào)將送往所有與調(diào)用kill()的那個(gè)進(jìn)程屬同一個(gè)使用組的進(jìn)程。
3. pid等于-1時(shí),信號(hào)將送往所有調(diào)用進(jìn)程有權(quán)給其發(fā)送信號(hào)的進(jìn)程,除了進(jìn)程1(init)。
4. pid小于-1時(shí),信號(hào)將送往以-pid為組標(biāo)識(shí)的進(jìn)程。

sig:準(zhǔn)備發(fā)送的信號(hào)代碼,假如其值為零則沒(méi)有任何信號(hào)送出,但是系統(tǒng)會(huì)執(zhí)行錯(cuò)誤檢查,通常會(huì)利用sig值為零來(lái)檢驗(yàn)?zāi)硞€(gè)進(jìn)程是否仍在執(zhí)行。

返回值說(shuō)明: 成功執(zhí)行時(shí),返回0。失敗返回-1,errno被設(shè)為以下的某個(gè)值 EINVAL:指定的信號(hào)碼無(wú)效(參數(shù) sig 不合法) EPERM;權(quán)限不夠無(wú)法傳送信號(hào)給指定進(jìn)程 ESRCH:參數(shù) pid 所指定的進(jìn)程或進(jìn)程組不存在

代碼?1?#include?
?2?#include?
?3?#include?
?4?#include?
?5?#include?
?6?
?7?int?main(?void?)
?8?{
?9?????pid_t?childpid;
10?????int?status;
11?????int?retval;
12?????
13?????childpid?=?fork();
14?????if?(?-1?==?childpid?)
15?????{
16?????????perror(?"fork()"?);
17?????????exit(?EXIT_FAILURE?);
18?????}
19?????else?if?(?0?==?childpid?)
20?????{
21?????????puts(?"In?child?process"?);
22?????????sleep(?100?);//讓子進(jìn)程睡眠,看看父進(jìn)程的行為
23?????????exit(EXIT_SUCCESS);
24?????}
25?????else
26?????{
27?????????if?(?0?==?(waitpid(?childpid,?&status,?WNOHANG?)))
28?????????{
29?????????????retval?=?kill(?childpid,SIGKILL?);
30?????????????
31?????????????if?(?retval?)
32?????????????{
33?????????????????puts(?"kill?failed."?);
34?????????????????perror(?"kill"?);
35?????????????????waitpid(?childpid,?&status,?0?);
36?????????????}
37?????????????else
38?????????????{
39?????????????????printf(?"%d?killed\n",?childpid?);
40?????????????}
41?????????????
42?????????}
43?????}
44?????
45?????exit(EXIT_SUCCESS);
46?}
47?//-----------------
48?[root@localhost?src]#?gcc?killer.c
49?[root@localhost?src]#?./a.out
50?In?child?process
51?4545?killed

在確信fork調(diào)用成功后,子進(jìn)程睡眠100秒,然后退出。
同時(shí)父進(jìn)程在子進(jìn)程上調(diào)用waitpid函數(shù),但使用了WNOHANG選項(xiàng),
所以調(diào)用waitpid后立即返回。父進(jìn)程接著殺死子進(jìn)程,如果kill執(zhí)行失敗,
返回-1,否這返回0。如果kill執(zhí)行失敗,父進(jìn)程第二次調(diào)用waitpid,
保證他在子進(jìn)程退出后再停止執(zhí)行。否則父進(jìn)程顯示一條成功消息后退出。

?

?

?

?

1) SIGHUP
本信號(hào)在用戶(hù)終端連接(正常或非正常)結(jié)束時(shí)發(fā)出, 通常是在終端的控制進(jìn)程結(jié)束時(shí), 通知同一session內(nèi)的各個(gè)作業(yè), 這時(shí)它們與控制終端不再關(guān)聯(lián)。

登錄Linux時(shí),系統(tǒng)會(huì)分配給登錄用戶(hù)一個(gè)終端(Session)。在這個(gè)終端運(yùn)行的所有程序,包括前臺(tái)進(jìn)程組和后臺(tái)進(jìn)程組,一般都屬于這個(gè) Session。當(dāng)用戶(hù)退出Linux登錄時(shí),前臺(tái)進(jìn)程組和后臺(tái)有對(duì)終端輸出的進(jìn)程將會(huì)收到SIGHUP信號(hào)。這個(gè)信號(hào)的默認(rèn)操作為終止進(jìn)程,因此前臺(tái)進(jìn)程組和后臺(tái)有終端輸出的進(jìn)程就會(huì)中止。不過(guò)可以捕獲這個(gè)信號(hào),比如wget能捕獲SIGHUP信號(hào),并忽略它,這樣就算退出了Linux登錄,wget也能繼續(xù)下載。

此外,對(duì)于與終端脫離關(guān)系的守護(hù)進(jìn)程,這個(gè)信號(hào)用于通知它重新讀取配置文件。

2) SIGINT
程序終止(interrupt)信號(hào), 在用戶(hù)鍵入INTR字符(通常是Ctrl-C)時(shí)發(fā)出,用于通知前臺(tái)進(jìn)程組終止進(jìn)程。

3) SIGQUIT
和SIGINT類(lèi)似, 但由QUIT字符(通常是Ctrl-\)來(lái)控制. 進(jìn)程在因收到SIGQUIT退出時(shí)會(huì)產(chǎn)生core文件, 在這個(gè)意義上類(lèi)似于一個(gè)程序錯(cuò)誤信號(hào)。

4) SIGILL
執(zhí)行了非法指令. 通常是因?yàn)榭蓤?zhí)行文件本身出現(xiàn)錯(cuò)誤, 或者試圖執(zhí)行數(shù)據(jù)段. 堆棧溢出時(shí)也有可能產(chǎn)生這個(gè)信號(hào)。

5) SIGTRAP
由斷點(diǎn)指令或其它trap指令產(chǎn)生. 由debugger使用。

6) SIGABRT
調(diào)用abort函數(shù)生成的信號(hào)。

7) SIGBUS
非法地址, 包括內(nèi)存地址對(duì)齊(alignment)出錯(cuò)。比如訪(fǎng)問(wèn)一個(gè)四個(gè)字長(zhǎng)的整數(shù), 但其地址不是4的倍數(shù)。它與SIGSEGV的區(qū)別在于后者是由于對(duì)合法存儲(chǔ)地址的非法訪(fǎng)問(wèn)觸發(fā)的(如訪(fǎng)問(wèn)不屬于自己存儲(chǔ)空間或只讀存儲(chǔ)空間)。

8) SIGFPE
在發(fā)生致命的算術(shù)運(yùn)算錯(cuò)誤時(shí)發(fā)出. 不僅包括浮點(diǎn)運(yùn)算錯(cuò)誤, 還包括溢出及除數(shù)為0等其它所有的算術(shù)的錯(cuò)誤。

9) SIGKILL
用來(lái)立即結(jié)束程序的運(yùn)行. 本信號(hào)不能被阻塞、處理和忽略。如果管理員發(fā)現(xiàn)某個(gè)進(jìn)程終止不了,可嘗試發(fā)送這個(gè)信號(hào)。

10) SIGUSR1
留給用戶(hù)使用

11) SIGSEGV
試圖訪(fǎng)問(wèn)未分配給自己的內(nèi)存, 或試圖往沒(méi)有寫(xiě)權(quán)限的內(nèi)存地址寫(xiě)數(shù)據(jù).

12) SIGUSR2
留給用戶(hù)使用

13) SIGPIPE
管道破裂。這個(gè)信號(hào)通常在進(jìn)程間通信產(chǎn)生,比如采用FIFO(管道)通信的兩個(gè)進(jìn)程,讀管道沒(méi)打開(kāi)或者意外終止就往管道寫(xiě),寫(xiě)進(jìn)程會(huì)收到SIGPIPE信號(hào)。此外用Socket通信的兩個(gè)進(jìn)程,寫(xiě)進(jìn)程在寫(xiě)Socket的時(shí)候,讀進(jìn)程已經(jīng)終止。

14) SIGALRM
時(shí)鐘定時(shí)信號(hào), 計(jì)算的是實(shí)際的時(shí)間或時(shí)鐘時(shí)間. alarm函數(shù)使用該信號(hào).

15) SIGTERM
程序結(jié)束(terminate)信號(hào), 與SIGKILL不同的是該信號(hào)可以被阻塞和處理。通常用來(lái)要求程序自己正常退出,shell命令kill缺省產(chǎn)生這個(gè)信號(hào)。如果進(jìn)程終止不了,我們才會(huì)嘗試SIGKILL。

17) SIGCHLD
子進(jìn)程結(jié)束時(shí), 父進(jìn)程會(huì)收到這個(gè)信號(hào)。

如果父進(jìn)程沒(méi)有處理這個(gè)信號(hào),也沒(méi)有等待(wait)子進(jìn)程,子進(jìn)程雖然終止,但是還會(huì)在內(nèi)核進(jìn)程表中占有表項(xiàng),這時(shí)的子進(jìn)程稱(chēng)為僵尸進(jìn)程。這種情況我們應(yīng)該避免(父進(jìn)程或者忽略SIGCHILD信號(hào),或者捕捉它,或者wait它派生的子進(jìn)程,或者父進(jìn)程先終止,這時(shí)子進(jìn)程的終止自動(dòng)由init進(jìn)程來(lái)接管)。

18) SIGCONT
讓一個(gè)停止(stopped)的進(jìn)程繼續(xù)執(zhí)行. 本信號(hào)不能被阻塞. 可以用一個(gè)handler來(lái)讓程序在由stopped狀態(tài)變?yōu)槔^續(xù)執(zhí)行時(shí)完成特定的工作. 例如, 重新顯示提示符

19) SIGSTOP
停止(stopped)進(jìn)程的執(zhí)行. 注意它和terminate以及interrupt的區(qū)別:該進(jìn)程還未結(jié)束, 只是暫停執(zhí)行. 本信號(hào)不能被阻塞, 處理或忽略.

20) SIGTSTP
停止進(jìn)程的運(yùn)行, 但該信號(hào)可以被處理和忽略. 用戶(hù)鍵入SUSP字符時(shí)(通常是Ctrl-Z)發(fā)出這個(gè)信號(hào)

21) SIGTTIN
當(dāng)后臺(tái)作業(yè)要從用戶(hù)終端讀數(shù)據(jù)時(shí), 該作業(yè)中的所有進(jìn)程會(huì)收到SIGTTIN信號(hào). 缺省時(shí)這些進(jìn)程會(huì)停止執(zhí)行.

22) SIGTTOU
類(lèi)似于SIGTTIN, 但在寫(xiě)終端(或修改終端模式)時(shí)收到.

23) SIGURG
有”緊急”數(shù)據(jù)或out-of-band數(shù)據(jù)到達(dá)socket時(shí)產(chǎn)生.

24) SIGXCPU
超過(guò)CPU時(shí)間資源限制. 這個(gè)限制可以由getrlimit/setrlimit來(lái)讀取/改變。

25) SIGXFSZ
當(dāng)進(jìn)程企圖擴(kuò)大文件以至于超過(guò)文件大小資源限制。

26) SIGVTALRM
虛擬時(shí)鐘信號(hào). 類(lèi)似于SIGALRM, 但是計(jì)算的是該進(jìn)程占用的CPU時(shí)間.

27) SIGPROF
類(lèi)似于SIGALRM/SIGVTALRM, 但包括該進(jìn)程用的CPU時(shí)間以及系統(tǒng)調(diào)用的時(shí)間.

28) SIGWINCH
窗口大小改變時(shí)發(fā)出.

29) SIGIO
文件描述符準(zhǔn)備就緒, 可以開(kāi)始進(jìn)行輸入/輸出操作.

30) SIGPWR
Power failure

31) SIGSYS
非法的系統(tǒng)調(diào)用。

在以上列出的信號(hào)中,程序不可捕獲、阻塞或忽略的信號(hào)有:SIGKILL,SIGSTOP
不能恢復(fù)至默認(rèn)動(dòng)作的信號(hào)有:SIGILL,SIGTRAP
默認(rèn)會(huì)導(dǎo)致進(jìn)程流產(chǎn)的信號(hào)有:SIGABRT,SIGBUS,SIGFPE,SIGILL,SIGIOT,SIGQUIT,SIGSEGV,SIGTRAP,SIGXCPU,SIGXFSZ
默認(rèn)會(huì)導(dǎo)致進(jìn)程退出的信號(hào)有:SIGALRM,SIGHUP,SIGINT,SIGKILL,SIGPIPE,SIGPOLL,SIGPROF,SIGSYS,SIGTERM,SIGUSR1,SIGUSR2,SIGVTALRM
默認(rèn)會(huì)導(dǎo)致進(jìn)程停止的信號(hào)有:SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU
默認(rèn)進(jìn)程忽略的信號(hào)有:SIGCHLD,SIGPWR,SIGURG,SIGWINCH


kill、killall

這兩個(gè)命令是用來(lái)向進(jìn)程發(fā)送信號(hào)的。kill 命令需要進(jìn)程號(hào)作為參數(shù),而 killall 需要進(jìn)程名稱(chēng)。

另外,還可以在這兩個(gè)命令后附加要發(fā)送信號(hào)序號(hào)作為參數(shù)。默認(rèn)情況下,它們都向相關(guān)進(jìn)程發(fā)送信號(hào) 15 (TERM)。例如,如果你想要終止 PID 為 785 的進(jìn)程,請(qǐng)輸入以下命令:

$ kill 785

如果您要向它發(fā)送信號(hào) 19 (STOP),請(qǐng)輸入:

$ kill -19 785

假設(shè)您知道想要終止的進(jìn)程的命令名稱(chēng)。您可以通過(guò)該名稱(chēng)來(lái)終止它,而不用再使用 ps 找出該進(jìn)程的進(jìn)程號(hào):

$ killall -9 mozilla


至于如何 安裝信號(hào),
http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html
http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index2.html

?

博客來(lái)源:http://hi.baidu.com/shoujiban/item/760791a881201c93151073bc

總結(jié)

以上是生活随笔為你收集整理的linux 系统kill用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。