Go 忽略';管道破裂';信号
执行命令时(在Linux中): 输出为:Go 忽略';管道破裂';信号,go,Go,执行命令时(在Linux中): 输出为: line 0 line 1 line 2 line 3 line 4 line 5 line 6 line 7 line 8 line 9 signal: broken pipe 如何防止程序打印信号通知(最后一行) [顺便说一句:即使是2>/dev/null也不起作用。可能是输出到TTY的最后一行]您没有打印代码测试。转到,因此很难判断。 例如,它是否在打印之间休眠 管道断开可能是因为管道链中的一个程序: a.exe|b.exe|c.exe|d.ex
line 0
line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
line 9
signal: broken pipe
如何防止程序打印信号通知(最后一行)
[顺便说一句:即使是
2>/dev/null
也不起作用。可能是输出到TTY的最后一行]您没有打印代码测试。转到,因此很难判断。
例如,它是否在打印之间休眠
管道断开可能是因为管道链中的一个程序:
a.exe|b.exe|c.exe|d.exe
提前终止。test.go
在head仍在等待时终止
输入或更可能在test.go
完成运行之前终止。尤其是因为head的默认值是10行
测试方法是执行运行test.go | head-20
,然后查看打印20后是否有管道破裂
我不能在C++中复制这个,不知道GO。如果这是go运行时的结果,我建议您尝试在代码中捕获SIGPIPE并安静地终止。(不管你使用哪种语言,过程是一样的,语法是不同的。)
否则,这更像是一个bash/zsh/无论shell是什么。在运行命令之前,请为SIGPIPE创建一个干净退出的信号处理程序。您是否尝试过go run test.go 2>/dev/null | head
?如果写入stdout返回错误,我尝试过go run test.go | head 2>/dev/null
,然后退出应用程序。仅当与|head
一起使用时,它才会返回信号:断管
行。如何捕捉错误?就像围棋中的其他错误一样捕捉错误。向我们显示要测试的源代码。如果不确定要做什么,请转到。
a.exe|b.exe|c.exe|d.exe