shell 是的|脑力劳动?

9jyewag0  于 2022-11-16  发布在  Shell
关注(0)|答案(1)|浏览(70)

根据post,它表示
内核向任何试图写入没有读取器的管道的进程发送SIGPIPE。这很有用,因为否则像yes | head这样的作业将永远不会终止。
如果我理解正确的话,当用户调用yes|head时,

  1. yeshead将首先并行运行
    1.之后,head停止运行
    1.当yes尝试写入管道时,它将收到SIGPIPE信号
    我说的对吗?如果我错过了什么,请告诉我。
ckx4rj1h

ckx4rj1h1#

下面是一个很好的例子:

% yes | uniq &
[1] 71546
y
% ps gxa | grep yes
  71545 pts/0    S      0:05 yes
% kill -PIPE 71545
%
[1]+  Done                    yes | uniq

在subshell中调用yes piped到uniq。您会看到单独的“y”被打印出来,作业被后台处理。稍等片刻,然后发现yes进程的PID仍在运行。然后向它发送PIPE信号。一切都干净地完成了。
查看source for yes,我们没有发现SIGPIPE的处理程序,所以使用了默认的终止操作。

相关问题