gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 03:00:21 25 4
gpt4 key购买 nike

执行命令时(在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com