使用excevp时,如何区分执行命令失败和命令执行以非零退出代码结束的情况?
答案 0 :(得分:2)
如果命令的执行失败(即没有开始),execvp
将返回-1,errno
将包含相关的错误代码。
如果命令执行成功,则execvp
不会返回。调用execvp
的父进程可以调用wait
来获取命令的返回值,无论是零还是非零。
答案 1 :(得分:0)
_exit(127)
如果exec失败,然后让父解释退出代码为exec失败(shell,system
和posix_spawn
都这样做,那么O_CLOEXEC
是常见的 - - 这实际上意味着他们无法判断孩子是否执行并返回127或者执行失败了。
如果你想要一个超级健壮的解决方案,你可以在分叉之前创建一个f.select(:player_id)
标记的管道,然后让子进程通过该管道将execv-elicited errno发送给父管道。