我是否有一种安全的方法或常见的做法可以确保我execvp
被处决的孩子生活在一个良好的状态?
例如:我让程序的用户为程序中的某些数据选择一个自定义处理器(假设他想用bzip2 -zc -
处理它们)。我使用通常的fork()
,execvp()
创建此流程,并为每个stdin,stdout和stderr创建pipe(), dup2()
。但是我不能影响用户是否给我一个正确的命令调用或者因为某些参数错误而会死的东西(例如,他可能会给我cat foo
但文件foo不存在因此猫会立即退出。
我能否以某种方式确保至少在我执行此用户命令之后,在我开始使用输入进行输入之前它处于良好状态 - 等待我的输入 - 并且尚未死亡或死亡?
答案 0 :(得分:3)
您可以使用
waitpid(ChildPID, &status, WNOHANG);
如果它返回0
则意味着孩子还活着。
答案 1 :(得分:0)
如果将他与孩子连接的管道关闭,父亲将收到一张SIGPIPE。如果孩子死亡,所有这些管道都会关闭,因此会发送一个SIGPIPE。