我正在測試一些功能來監視進程,我需要模擬具有確定的「延遲」的長核心轉儲(例如,我需要使一個進程「轉儲核心」30秒)。我注意到,轉儲核心的過程是在不可中斷的睡眠中進行的,所以它不能被SIGKILL殺死,但是當我嘗試使用接收coredump的管道命令來模擬此行爲時,我可以輕鬆地殺死這樣的進程。那麼是否有某種方法可以使進程進入不間斷睡眠狀態(在ps中),並使其忽略SIGKILL?我怎樣才能把過程變成「不間斷睡眠」?
1
A
回答
1
要將進程置於可中斷睡眠模式,您將不得不進入內核代碼。 使用wake_up_interruptible
和自旋鎖的功能,您將能夠達到此狀態。
-3
沒有辦法阻止SIGKILL。這是目的。擺脫過程的大錘法。 SIGKILL可以阻止的唯一方法是如果進程在內核中被鎖定。
0
一個可靠的(如果很複雜的)方法是硬掛載一個NFS目錄,然後取下NFS服務器。
3
最正確的方法是使用冷凍箱cgroup。它在冷凍cgroup狀態的情況下將過程置於不間斷睡眠。
# mkdir /sys/fs/cgroup/freezer
# mount -t cgroup -ofreezer freezer /sys/fs/cgroup/freezer
# mkdir /sys/fs/cgroup/freezer/frozen
# echo FROZEN > /sys/fs/cgroup/freezer/frozen/freezer.state
# echo `pidof you_process` > /sys/fs/cgroup/freezer/frozen/tasks
要再次進行可中斷睡眠,只需將cgroup狀態更改爲THAWED即可。
+0
這對我有用,謝謝。出於某種原因,在向進程發送SIGTERM之後,'ps aux'的輸出只反映了狀態'D'。 –
相關問題
- 1. 我怎樣才能把它變成shellcode?
- 2. android - 我怎樣才能獲得睡眠時間
- 3. Bash Unix:我怎樣才能暫停進程而不使用睡眠命令
- 4. 我怎樣才能把它變成一個循環?
- 5. 我怎樣才能把它變成一個div
- 6. 我怎樣才能把它變成一個循環?
- 7. 我怎樣才能把變量,而不是文字數字?
- 8. 我怎樣才能把插在VAR
- 9. 我怎樣才能把GridView的行
- 10. 我怎樣才能把「子類」一類
- 11. 休眠:我怎樣才能解決java.lang.IncompatibleClassChangeError:
- 12. 我怎樣才能不斷更新tableview每'位置變化'?
- 13. 我怎樣才能不斷更新變量從外面的類?
- 14. 睡眠不中斷程序
- 15. 我怎樣才能把這個javascript的結果變成一個php變量?
- 16. 我怎樣才能把NSDate()分成幾塊?
- 17. 我怎樣才能把python代碼轉換成windows dll
- 18. 我怎樣才能把幾天分成幾周?
- 19. 我怎樣才能把這個寫成一個查詢?
- 20. 我怎樣才能把這個翻譯成mysql?
- 21. 我怎樣才能把這個csv轉換成D3-ready的json?
- 22. 我怎樣才能把它分成兩個字符串?
- 23. 我怎樣才能把數據從excel解析成模型?
- 24. 我怎樣才能把$變量到數組
- 25. 我怎樣才能把textcolr和改變大小的微調
- 26. 我怎樣才能把javascript變量到Url.Action
- 27. 我怎樣才能把一個變量在window.open()
- 28. 我怎樣才能把一個變量formulaire選項在javascript
- 29. 我怎樣才能避免把這個變量放在棧上?
- 30. 我怎樣才能
但在轉儲過程中,核心進程不受SIGKILL的影響。 –
因此...在內核中被阻塞。 –
如果你讓他們被STAT == D阻塞,至少在我們的系統(centos6.4)上你不能殺死他們,你需要解決潛在的問題。 – nhed