Linux中的kill
函數是否同步?說,我編程地調用kill
函數來終止一個進程,它只會在目標進程終止時返回,或者它只是發送信號並返回。如果是這樣的話,我怎麼才能讓它等待預定的進程被殺呢?殺死函數是否同步?
回答
不,因爲它不會殺死任何東西,它只會向進程發送一個信號。
默認情況下,該信號甚至可以被阻止或忽略。
這代表發送SIGKILL
等待過程中死亡你不能阻止kill -9
:
while kill -0 PID_OF_THE_PROCESS 2>/dev/null; do sleep 1; done
+1顯示一個簡單的等待直到pid消失的方法。 – 2012-01-06 19:00:03
SIGKILL不能被進程阻止或忽略。但你說得對,這個過程不會立即終止。如果一個進程正在進行系統調用,它只會在系統調用返回時結束。所以如果它做了一些真正的重大處理,可能需要時間。 – ugoren 2012-01-06 20:38:24
如果它處於'UNINTERRUPTIBLE'狀態,它也會拒絕死亡 – 2012-05-02 18:53:47
壓井系統調用不會等待其他進程做任何事情。信號被髮送到目標進程並且系統調用返回。目標進程在計劃運行時注意到信號。
kill
不能同步,因爲它只發送一個信號。目標進程可能會忽略輸入信號(參見SIG_IGN
),因此無法保證kill
的效果。
實驗驗證這個假設不應該很難。啓動進程A並使其在死亡之前以10秒睡眠處理SIGTERM
。然後啓動過程B,它將一個SIGTERM
傳遞給A並立即退出。
- 號
man 2 kill
man wait
又見man 7 signal
有關UNIX信號的更多細節。
- 1. S3cmd同步返回「殺死」
- 2. JQuery殺死函數
- 3. Javascript殺死函數?
- 4. jQuery殺死其他函數
- 5. mouseout殺死函數javascript
- 6. 殺死Javascript函數或使函數Singleton
- 7. jQuery「each()」函數是否同步?
- 8. apache是否會殺死我的進程?
- 9. 殺死Mercurial(hg)進程是否安全?
- 10. 對象是否會被殺死?
- 11. AngularJS殺死了我的JavaScript函數
- 12. rJava startMainLoop()函數殺死Java操作
- 13. 點擊事件後殺死函數JavaScript
- 14. MySQL函數殺死熟睡的連接
- 15. 的jQuery的.html()函數殺死一切
- 16. 如何殺死一個javascript函數?
- 17. 在JS中殺死卸載函數?
- 18. 當父進程被「kill -9」殺死時,子進程是否也會被殺死?
- 19. javascript函數是同步還是異步?
- 20. dispatchEvent是同步還是異步函數
- 21. 如何殺死一個異步任務?
- 22. 如何殺死所有異步進程
- 23. jQuery函數是否異步?
- 24. 在Bash中,殺死後臺函數不會殺死內部進程,爲什麼他們有不同的pid?
- 25. 殺死不會殺死進程
- 26. 殺死進程殺死其他進程
- 27. '殺死'是什麼意思?
- 28. 異步函數同步結束時是否設置了OVERLAPPED.hEvent?
- 29. 使mongoskin函數是異步同步
- 30. 是否有可能在node.js的同步函數中處理異步和同步函數結果?
有意思的是,我可以說不,因爲我已經在流程中使用了'kill',讓它返回並讓流程仍然存在。然後不得不做一個'殺死-9'。 – 2012-01-06 18:01:45
注意:並非所有發送給進程的信號都會終止它 - 即使是'kill 1234'(使用SIGTERM)也會被截獲並被繞過。無條件殺死的唯一方法是使用'kill -9',這相當殘酷(沒有清理的機會)。 – Piskvor 2012-01-06 18:05:16
即使'kill -9'也會立即殺死它,因爲有些狀態(特別是狀態「D」)不會死亡,直到內核線程完成。 – 2012-01-06 18:06:33