所以我的问题是,当你在bashgg/hh | sleep 5 | gg/hh
中键入这个命令时,它会打印
bash: gg/hh: No such file or directory
bash: gg/hh: No such file or directory
然后它就睡着了。你如何在C中模仿这种行为。因为你需要waitpid(pid, &status, 0)
来获得你执行的命令的状态,以便打印出No such file or directory
。那么,如何在不等待睡眠结束的情况下获得子进程中execve
的状态呢。
执行顺序如下:
- shell派生出三个独立的子进程(带有一些互连的stdin和stdout(:一个用于运行
gg/hh
,另一个用于sleep 5
,第三个用于另一个gg/hh
- 三者同时运行(或尝试运行(
- shell开始等待所有三个退出(使用
waitpid()
或类似的东西( - 两个
gg/hh
进程失败,打印它们的错误消息(到stderr,所以它们直接进入终端(,然后退出。父shell进程不参与打印这些错误消息,因此它暂停的事实并不重要 - 五秒钟后,
sleep 5
进程结束并退出 - 父shell进程完成对其子进程的等待,并提示输入新命令
注意,waitpid()
设置的wstatus
与错误消息无关;它是一个整数,表示进程是否成功,以及可能出现的问题。用于设置特殊参数$?
,但不打印。