在什么情况下,Python子进程会获得SIGPIPE?

在什么情况下,Python子进程会获得SIGPIPE?,第1张

在什么情况下,Python子进程会获得SIGPIPE?

SIGPIPE
是一个信号,如果
dmesg
尝试写入关闭的管道将被发送。在这里,
dmesg
最后有 两个
要写入的目标,即Python进程和该
grep
进程。

那是因为

subprocess
克隆文件句柄(使用
os.dup2()
函数)。配置
p2
为使用
p1.stdout
会触发一个
os.dup2()
调用,要求 *** 作系统复制管道文件句柄。重复用于连接
dmesg
grep

对于

dmesg
stdout,有两个打开的文件句柄,如果只有 其中一个
提前关闭,
dmesg
则永远不会发出
SIGPIPE
信号,因此永远不会检测到关闭。会不必要地继续产生产出。 __
grep``dmesg

因此,通过

p1.stdout
立即关闭,可以确保从
dmesg
stdout读取的唯一剩余文件句柄是该
grep
进程,并且如果该进程将退出,则会
dmesg
收到
SIGPIPE



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5663389.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存