殺死父級的所有進程但不是父級的最佳方法是什麼?比方說,我有一個未定數的子進程,我已經分叉並且在給定的報警中,在我的信號處理程序中,我想要殺死所有子進程,但由於各種原因保持自己運行。截至目前,我正在使用kill(-1 * parentPid,SIGKILL),但這會殺死我的父母及其子女。殺死父級的所有子進程但離開父級活動
3
A
回答
3
完成此操作的一種方法是發送一些可以捕獲的信號(而不是SIGKILL
)。然後,安裝一個信號處理程序,檢測當前進程是否爲父進程,如果不是父進程,則調用_exit()
。
您可以使用SIGUSR1
或SIGUSR2
或者SIGQUIT
。
我已經說明了這種技術here。
可選(根據Lidong的建議),在發出kill()
命令之前,父進程可以在信號上使用SIG_IGN
。
signal(SIGQUIT, SIG_IGN);
kill(-parent_pid, SIGQUIT);
0
Jxh的回答很好。無論如何,也許你可以給fork
之後的每個子進程給一個signal hander
,並讓它調用exit
函數。你給父母signal hander
,並讓它ignore
的信號(如SIGUSR1
)。這可能會添加代碼行,但您不需要檢測信號處理函數中的父進程或子進程。
+3
嗨李東,一個小例子會走很久方式來說明應該做什麼=) – puk
相關問題
- 1. Android:按主頁按鈕在子活動中殺死父活動
- 2. 當父進程被「kill -9」殺死時,子進程是否也會被殺死?
- 3. 產卵將殺死其父母但進程仍然活着的新進程?
- 4. 重新開放活動殺死進程
- 5. 當父母離開時叉子子進程會死? (bash)
- 6. onActivityResult被調用父級活動不子
- 7. jQuery隱藏父級但不是子級
- 8. nodeJS中的父級子進程
- 9. 雖然試圖殺死父進程,子進程仍在運行
- 10. 父進程出口處殺死子進程
- 11. Bash子進程在執行eval時殺死父進程exec
- 12. 如何通過shell殺死父進程?
- 13. python殺死所有的子進程,甚至父母已經退出
- 14. 從父級刪除所有子節點?
- 15. jQuery父級和子級divs激活不同的動作
- 16. 父進程等到子進程終止時,子進程如何才能殺死父進程?
- 17. C++在殺死父進程後保持進程有效
- 18. .kill()在python子進程中殺死父進程而不是子進程
- 19. Android - 保持服務活着,即使父進程被殺死
- 20. 可移動的QGraphicsItem父級但不是子級QGraphicsItem
- 21. 殺死父進程並在fork()之後離開子進程的目的是什麼?
- 22. 如何殺死一個父進程的子樹的樹
- 23. android startActivityForResult正在殺死父活動中的一個線程
- 24. 子進程殺死它的父母不會終止自己
- 25. 設置父級和子級模型,但子級擁有它自己的列
- 26. 殺死分叉的孩子殺死父母嗎?
- 27. 如果父母死亡,子進程不會自殺
- 28. 子級的子域父類
- 29. 殺死活動的所有實例
- 30. 如何使用管道同步父級和子級進程?
你可以簡單地跟蹤孩子的PIDs在一個簡單的數組,當你叉他們? – user4815162342
我試過,但由於被分叉進程的量是不知道,我必須保持多少已經取得了櫃檯,以便正確地對其進行索引和計數器變量的狀態不是很好在多個流程定義。 ..當然,我的執行可能很差。 –
所以你可以發送一個信號給父母和孩子,對嗎? –