go - 忽略 'broken pipe' 信号的输出

标签 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

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

[顺便说一句:即使 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/

相关文章:

json - 如何解析/反序列化动态 JSON

ssh - Golang - 到多个节点的并发 SSH 连接

json - 如何从Golang中具有json对象列表的文件中读取单个json对象

go - 如何在 Go 中获取 URL

git - 如何使用Go远程导入路径指定端口?

go - 如何将数组处理分离到 goroutines 中?

go - 如何切换数据库连接并将其共享到 Golang 中的模型? (Revel + Gorm)

logging - 我应该在 Go 中关闭日志文件吗?

go - 释放结构图

go - 发生异常时继续执行循环