忽略'破管'信号

时间:2015-07-22 01:15:38

标签: go

执行命令时(在Linux中):

go run test.go |head

输出结果为:

line 0
line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
line 9
signal: broken pipe

如何防止程序打印信号通知(最后一行)?

[BTW:偶2>/dev/null不起作用。可能最后一行输出到TTY]

1 个答案:

答案 0 :(得分:1)

您不打印代码test.go,因此很难判断。 例如,它是否在打印之间休眠?

由于管道链中的一个程序,断管会很开心:

a.exe|b.exe|c.exe|d.exe

提前结束。 test.go在头部仍然期待时终止 输入或更可能的头在test.go完成运行之前终止。特别是因为head的默认值是10行。

对此进行的测试是go run test.go |head -20,看看打印后是否有管道损坏。

我无法用C ++复制它,也不知道去吧。如果它是go运行时的结果,我建议你尝试在代码中捕获SIGPIPE并安静地终止。 (与你的语言无关,过程与语法不同。)

否则这更像是一个bash / zsh /无论shell du jour是什么。在运行命令之前,让SIGPIPE的信号处理程序干净地退出。