我正在尋找一種在C++中以跨平臺方式進行基本進程管理的方式,但我無法使用外部庫(如boost :: process)。 場景是這樣的 - 我打電話給std :: system, 的子進程,以防父進程被一個信號中斷,我需要在退出之前殺掉子進程,以避免它作爲殭屍。 我讀過信號處理,但我不知道如何殺死在句柄函數中使用std :: system創建的進程。 是否有另一種/更好的方法來做到這一點?在C++跨平臺啓動和終止進程
2
A
回答
1
C++最近得到了線程的語義,但是它沒有(還有)具有進程的語義。因此,它不提供任何殺死系統上正在運行的進程的設施。
因此,唯一可行的方法是讓父進程向子進程發送某種信號,並使子進程在接收到信號時自行終止。有多種方法可以進行這種信令(例如,通過OS信號,通過標準IPC原語,通過網絡),但標準C++並不爲大多數方式提供任何便攜式機制。因此,您最終會選擇使用外部庫(例如Boost,Qt等)或將您的實現限制爲一組受支持的系統(例如,POSIX OS,在這種情況下,您甚至可以直接調用kill
) 。
1
流程管理特定於每個平臺。經典的方式(如果你不想使用外部庫)是每個平臺編寫代碼,並將其與編譯時的預處理條件分開:
// For both OS X and iOS
#ifdef __APPLE__
// includes or code
#endif
// For Windows:
#ifdef __MINGW32__
// includes or code
#endif
// For Linux:
#ifdef __linux__
// includes or code
#endif
這裏有更多的解決方案: How to identify platform/compiler from preprocessor macros?
相關問題
- 1. 用C程序啓動和終止cu
- 2. C++啓動新進程並終止現有的進程
- 3. 跨平臺移動平臺編程
- 4. 後臺進程在其父進程終止時被終止?
- 5. C++跨平臺動態庫; Linux和Windows
- 6. C++跨平臺多線程?
- 7. 跨平臺C?
- 8. c + +啓動新的進程,並終止在linux下當前的
- 9. C# - 在後臺啓動進程
- 10. 跨平臺NPM啓動腳本
- 11. 父進程在C#中終止時如何終止子進程
- 12. C#Activex跨平臺
- 13. 從C#啓動Java平臺#
- 14. 在C/C++窗口終止進程
- 15. 如何啓動分離進程並等待父進程終止?
- 16. 從python函數啓動和終止子進程
- 17. 在Ctrl-C上終止父進程和子進程
- 18. paramiko:自動終止遠程啓動的進程
- 19. 跨平臺C# - System.io和其他怪癖
- 20. 學習和跨平臺開發(C++)
- 21. 跨平臺和iPhone和Android
- 22. 跨平臺C++工具鏈
- 23. 跨平臺C++工具鏈
- 24. 跨平臺C++與libcurl
- 25. C++中的跨平臺OOP
- 26. 如何在c#控制檯應用程序中止時終止子進程?
- 27. C++跨平臺進程:POCO lib好嗎?其他選擇?
- 28. C webserver中進程之間的跨平臺通信方式
- 29. 從終端自動終止java進程
- 30. 當退出時終止在xterm內啓動的所有進程
如果父母去世,孩子變成了孤兒,而不是殭屍。殭屍是一個沒有收穫的死亡孩子。 –
對此的解決方案依賴於系統。從你的描述來看,你似乎是在unix上(例如linux,BSD等)或類似的。是POSIX嗎?如果是這樣,您將擁有一組可用於查找/終止進程的與平臺相關的函數(儘管posix的某些方面是鬆散指定的,因此實現因系統而異)。如果你有多種目標系統(比如posix和non-posix),你肯定會針對不同的目標需要不同的解決方案。除了使用第三方庫之外,在標準C++中沒有解決方案(反過來,它依靠平臺依賴關係) – Peter