您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

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

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

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

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

python 2022/1/1 18:50:37 有541人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶