如何在使用execvp时区分执行情况?

时间:2016-09-17 19:21:48

标签: c

使用excevp时,如何区分执行命令失败和命令执行以非零退出代码结束的情况?

2 个答案:

答案 0 :(得分:2)

如果命令的执行失败(即没有开始),execvp将返回-1,errno将包含相关的错误代码。

如果命令执行成功,则execvp不会返回。调用execvp的父进程可以调用wait来获取命令的返回值,无论是零还是非零。

答案 1 :(得分:0)

_exit(127)如果exec失败,然后让父解释退出代码为exec失败(shell,systemposix_spawn都这样做,那么O_CLOEXEC是常见的 - - 这实际上意味着他们无法判断孩子是否执行并返回127或者执行失败了。

如果你想要一个超级健壮的解决方案,你可以在分叉之前创建一个f.select(:player_id)标记的管道,然后让子进程通过该管道将execv-elicited errno发送给父管道。