管道中的命令是否同时运行?

Tim*_*Tim 5 pipe

在诸如这样的管道中command1 | command2

  • 命令是否同时运行(即具有相同的生命周期),或
  • command2 在 command1 退出时开始运行,或
  • 还有什么?

当我听说命令的进程形成一个进程组时,我的问题就出现了。如果它们没有相同的生命周期,那么命令进程的进程组是不是毫无意义?

hma*_*ica 7

这些进程同时启动,并发运行,但不必同时停止。当两个进程都终止时,shell 将认为整个管道已终止(并显示新的提示)。

如果command2command1执行之前结束(或关闭其标准输入流),command1然后尝试写入输出,则该输出无处可去。然后command1会收到一个SIGPIPE信号,它的默认动作是 abort command1。但command1它本身可以覆盖这个默认值,这样它就可以继续运行。在这种情况下,它尝试写入输出将产生一个普通的 I/O 错误 ( EPIPE),它可以根据需要做出反应。