我需要能够:
- fork 一个进程并使其成为 execvp(我这样做了)
- 检查子进程execvp是否成功(不知道如何)
- 检查子进程是否完成(有问题)
我正在分叉一个进程,我没有任何方法可以检查孩子的 execvp 是否有效。如果它失败了,我需要能够知道它失败了。目前我正在使用
-1 != waitpid( pid, &status, WNOHANG )
但似乎如果 pid 进程的 execv 失败,waitpid 不会返回 -1。
我怎么能检查呢?我阅读了 waitpid 手册页,但我不清楚;也许我的英语不够好。
编辑:为了解释更多:
我正在为家庭作业构建自己的终端。我需要输入一个命令字符串,比如说“ls”,然后我必须执行命令。
孩子分叉后,孩子调用 execvp 以执行命令(在我解析字符串之后),父母需要检查命令末尾是否有'&'。
如果命令末尾不存在符号“&”,则父级需要等待子级执行。
所以我需要知道 execvp 是否失败。如果它没有失败,那么父母使用 waitpid 等待孩子完成它的执行。如果失败,则父母将不会等待孩子。