SIGPIPE是一个信号,如果
dmesg尝试写入关闭的管道将被发送。在这里,
dmesg最后有 两个
要写入的目标,即Python进程和该
grep进程。
那是因为
subprocess克隆文件句柄(使用
os.dup2()函数)。配置
p2为使用
p1.stdout会触发一个
os.dup2()调用,要求 *** 作系统复制管道文件句柄。重复用于连接
dmesg到
grep。
对于
dmesgstdout,有两个打开的文件句柄,如果只有 其中一个
提前关闭,
dmesg则永远不会发出
SIGPIPE信号,因此永远不会检测到关闭。会不必要地继续产生产出。 __
grep``dmesg
因此,通过
p1.stdout立即关闭,可以确保从
dmesgstdout读取的唯一剩余文件句柄是该
grep进程,并且如果该进程将退出,则会
dmesg收到
SIGPIPE。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)