执行命令时(在 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
如何防止程序打印信号通知(最后一行)?
[顺便说一句:即使 2>/dev/null
也不起作用。可能是输出到 TTY 的最后一行]
最佳答案
你没有打印代码test.go
,所以很难判断。
例如,它在打印之间是否休眠?
管道链中的一个程序会导致管道损坏:
a.exe|b.exe|c.exe|d.exe
提前终止。当 head 仍在等待时 test.go
终止
输入或更可能的 head 在 test.go
完成运行之前终止。特别是因为 head 的默认行数是 10 行。
对此的测试是执行 go run test.go |head -20
并查看打印 20 后管道是否损坏。
我无法在 C++ 中复制此内容,并且不知道如何进行。如果这是 go 运行时的结果,我建议你尝试在代码中捕获 SIGPIPE 并安静地终止。 (无论您使用哪种语言,过程都是相同的,但语法不同。)
否则这更像是 bash/zsh/无论什么 shell du jour。在运行命令之前,为 SIGPIPE 创建一个信号处理程序以干净退出。
关于go - 忽略 'broken pipe' 信号的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31552290/