c-bash中管道时打印错误的顺序



所以我的问题是,当你在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的状态呢。

执行顺序如下:

  1. shell派生出三个独立的子进程(带有一些互连的stdin和stdout(:一个用于运行gg/hh,另一个用于sleep 5,第三个用于另一个gg/hh
  2. 三者同时运行(或尝试运行(
  3. shell开始等待所有三个退出(使用waitpid()或类似的东西(
  4. 两个gg/hh进程失败,打印它们的错误消息(到stderr,所以它们直接进入终端(,然后退出。父shell进程不参与打印这些错误消息,因此它暂停的事实并不重要
  5. 五秒钟后,sleep 5进程结束并退出
  6. 父shell进程完成对其子进程的等待,并提示输入新命令

注意,waitpid()设置的wstatus与错误消息无关;它是一个整数,表示进程是否成功,以及可能出现的问题。用于设置特殊参数$?,但不打印。

最新更新