有沒有辦法殺死我的應用程序的子進程,並執行它的清理(調用解構器和atexit函數),類似於exit(exit_code)
,但在另一個進程?殺死子進程清除
殺死子進程清除
回答
如果你在windows上,你可能通過CreateProcess啓動你的子進程,它有一個PROCESS_INFORMATION作爲最後一個參數。
選項1:
這個過程信息包含的句柄過程中hProcess構件啓動。
您可以存儲此句柄並使用它來殺死您的子進程。
插入 您可能想要發送WM_CLOSE和/或WM_QUIT? 爲 「乾淨」 結束進程:
這裏是做什麼KB how to cleanly kill win32 processes
**末尾插入**知識庫文章
選項2:
這裏有一個討論關於如何正確地殺死進程樹:Terminate a process tree on windows
'ExitProcess'殺死了調用它的進程,我需要從父進程中殺死子進程,'TerminateProcess'不執行清理! –
由於您沒有提供有關如何生成這些流程以及它們是什麼類型的流程的信息,它有點困難。發送一個WM_CLOSE可能沒關係,或者一個GenerateConsoleCtrlEvent()可以完成這個工作。 –
我使用'CreateProcess'和我對這樣做的普遍方式感興趣,不同於'WM_CLOSE/WM_QUIT',它假定進程有一個窗口 –
這種事情沒有簡單的Win32 API。操作系統不關心你的程序的源代碼是用什麼語言編寫的,編譯後的程序看起來只是一系列的CPU指令和數據。
最簡潔的方法是在進程之間建立某種通信通道(例如通過共享內存)並簡單地請求進程終止。
您可以通過將子進程作爲調試進程啓動,然後使用調試API來改變子進程的行爲來達到同樣的效果,但這太乾擾並且不易實現。
- 1. 殺死進程殺死其他進程
- 2. 殺死Popen子進程
- 3. 殺死進程
- 4. 殺死進程
- 5. 殺死進程
- 6. 殺死不會殺死進程
- 7. SIGKILL殺死進程
- 8. Android殺死進程
- 9. VB.NET - 殺死進程
- 10. 殺死進程SHELL
- 11. 殺死進程winword
- 12. 殺死mysqld進程
- 13. 如何從memroy中清除進程時它被殺死
- 14. 無法弄清楚如何殺死Python 3.5中的子進程
- 15. 當父進程被「kill -9」殺死時,子進程是否也會被殺死?
- 16. 第一行後殺死子進程
- 17. systemd`systemctl stop`積極殺死子進程
- 18. 如何殺死Node Express子進程?
- 19. 殺死一個懸掛的子進程
- 20. PHP - 殺死pcntl_fork啓動的子進程
- 21. Bash:啓動並殺死子進程
- 22. 如果exec失敗,殺死子進程
- 23. 如何殺死Bash中的子進程?
- 24. 子進程沒有被Node.JS殺死
- 25. 蟒蛇multiprocessing.Process.terminate - 如何殺死子進程
- 26. 殺死子進程如果proc
- 27. 殺死java.lang.Process不會終止子進程()
- 28. 用PyInstaller殺死一個子進程
- 29. 殺死Emacs子進程窗口10
- 30. 如何殺死一個子進程
可能的重複http://stackoverflow.com/questions/6501522/how-to-kill-a-child-process-by-the-parent-pr Ocess –
@MareInfinitus這是unix,我需要一個Windows實現 –