0

有没有一种安全的方法或常见的做法来确保我execvp被处决的孩子生活在良好的状态?

例如:我让我的程序的用户为程序中的一些数据选择一个自定义处理器(假设他想用 处理它们bzip2 -zc -)。fork()我使用通常的,execvp()并为每个 stdin、stdout 和 stderr创建这个过程pipe(), dup2()。但是我无法影响用户是否给了我一个正确的命令调用或由于某些参数错误而将死的东西(例如,他可能给了我cat foo但文件 foo 不存在,因此 cat 将立即退出)。

我能否以某种方式确保至少在执行此用户命令之后并且在我开始输入输入之前它处于良好状态 - 等待我的输入 - 而不是已经死亡或死亡?

4

2 回答 2

3

您可以使用

waitpid(ChildPID, &status, WNOHANG); 

如果它返回0意味着孩子还活着。

于 2013-10-30T12:07:20.773 回答
0

如果连接他和孩子的管道关闭,父亲将收到一个 SIGPIPE。如果孩子死了,所有这些管道都会关闭,因此会发送一个 SIGPIPE。

于 2013-10-30T12:06:06.870 回答