為什麼指令碼中kill程序之後需要進行sleep

2021-10-10 16:02:22 字數 1575 閱讀 4126

我們在一些重啟指令碼中,經常可以看到在kill程序之後,會sleep一段時間,這是為什麼呢?下面,就讓我們來研究一下

我們知道kill命令是傳送指定的訊號到相應程序,kill命令的工作原理是,向linux系統的核心傳送乙個系統操作訊號和某個程式的程序標識號,然後系統核心就可以對程序標識號指定的程序進行操作。我們常用是15(sigterm)和9(sigkill),沒有資訊編號,預設是15

9和15的意思:

9 (

kill

):殺死乙個程序,強行終止乙個程序,這可能會帶來一些***,如資料丟失或者終端無法恢復到正常狀態。

15 (term):正常停止乙個程序,這個訊號可以被程序捕獲,使得程序在退出之前可以清理並釋放資源,相當於讓程序正常終止。

由此,我們可以推斷出kill程序並不是立即生效的,而是具有一定延時的。

在所有kill訊號中,除了9無條件終止程序之外,其他訊號都有可能被阻塞或者忽略,而且就算是訊號9,也會先被放到pending佇列,等到下一次cpu排程才會生效,所以一般我們kill程序之後會sleep一會,保證程序被殺死,否則可能會出現程序未被殺死而導致重啟失敗。

額外:我們可以使用kill -l 檢視所有的kill訊號值

kill

-l 1) sighup 2) sigint 3) sigquit 4) sigill 5) sigtrap

6) sigabrt 7) sigbus 8) sigfpe 9) sigkill 10) sigusr1

11) sigse** 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) si**talrm 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

程序中為什麼會有同名的程序

在看乙個專案 時,發現在除錯時出現有同名的程序,比如說svshost.exe 現將查詢到的資料做個筆記。歡迎補充。詳細分析svshost.exe程序 其實svshost.exe是windows xp系統的乙個核心程序。svshost.exe不單單只出現在windows xp中,在使用nt核心的win...

bash指令碼檔案中為什麼以 開頭

在每個bash指令碼的開頭都使用 這用來告訴系統此檔案的執行需要指定乙個直譯器。實際上是乙個 2 位元組的魔力數字,這是指定乙個檔案型別的特殊標記,換句話說,在這裡指是乙個可執行的指令碼 鍵入 man magic 來獲得關於這個迷人話題的更多詳細資訊 在 之後接著是乙個路徑名,這個路徑名指定了乙個解...

Vbs指令碼程式設計簡明教程之一 為什麼要使用Vbs?

在 windows 中,學習計算機操作也許很簡單,但是很多計算機工作是重複性勞動,例如你每週也許需要對一些計算機檔案進行複製 貼上 改名 刪除,也許你每天啟動計算機第一件事情就是開啟 word 第三方軟體也許可以強化計算機的某些功能,但是解決這些重複勞動往往事倍功半,我也嘗試過使用計算機語言編寫程式...