我的C++程序将使用fork()和execv()产生多个子进程。我如何查询这些进程?如果我想关闭一个,我该怎么做?如何查询C++中的子进程
0
A
回答
5
当您fork
时,子进程中的返回值为0,父进程中的子进程ID(pid)为0。
然后,您可以使用该pid调用kill
以查看它是否仍在运行,或请求关闭。要检查进程是否正在运行,请使用0作为信号,然后检查返回值(0 ==正在运行; -1 ==未运行)。要请求关机,请使用SIGTERM
作为信号。
1
可能是我知道的fork()
后进程之间沟通的最佳方式是通过插座(参见socketpair())。
从那里,你可以通过定义一个通信协议(包括终止请求)来完成任何工作。
0
到fork()
通话后,您可以使用wait(&status_int)
或waitpid(child_pid, &status_int, WNOHANG)
检测儿童的返回状态,使用后者,如果你不希望阻止等待一个孩子。传递的参数&status_int
将是一个指向int
的指针,它将在退出后保留子进程的返回状态。如果您想等待任何分支过程完成,并且不关心返回值,则可以简单地拨打wait(NULL)
或非阻止版本waitpid(-1, NULL, WNOHANG)
。
相关问题
- 1. 如何在C中fork()n子进程?
- 2. 如何使用SQL查询中的查询进行查询
- 3. 如何查看子进程的stdout?
- 4. 父进程在C#中终止时如何终止子进程
- 5. 如何子句中的子查询
- 6. 如何使用常规Windows C/C++ API查询进程的线程数
- 7. 如何使这些查询进行子查询?
- 8. 如何通过子查询改进/简化查询?
- 9. 如何使用from语句中的子查询进行LINQ查询?
- 10. 如何使用相关子查询进入Codeigniter中的活动记录查询
- 11. 如何查询低完整性进程下的进程名称?
- 12. 如何检查查询中的子查询的交集?
- 13. 如何在oracle中进行多对多的子查询?
- 14. 如何使用Zend_Db_Adapter_Mysqli :: fetchAll()中的“IN”WHERE子句进行查询?
- 15. 如何从NHibernate的子查询中进行选择
- 16. Ctrl-C如何终止子进程?
- 17. 如何查找所有子进程?
- 18. 如何在Laravel中使用子查询正确查询查询
- 19. C#的LINQ子查询中的foreach
- 20. 如何进一步子查询从SQL查询中获取所有Product_ID?
- 21. 如何在子查询中使用主查询中的列?
- 22. SQL自子查询改进
- 23. C:父子进程
- 24. 如何查询子文档中的mongodb
- 25. 如何查询mongodb中的子对象
- 26. 如何重写JOIN中的子查询?
- 27. 如何在MySQL中对多个子查询进行分组
- 28. 如何在jena中使用子查询进行分页?
- 29. 如何在laravel雄辩中进行子查询?
- 30. 如何在Power Query中使用M进行子查询/ Power BI