Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在select()中等待匿名管道可读时,如何检测子级的退出?_Python_Unix_Select_Pipe_Waitpid - Fatal编程技术网

Python 在select()中等待匿名管道可读时,如何检测子级的退出?

Python 在select()中等待匿名管道可读时,如何检测子级的退出?,python,unix,select,pipe,waitpid,Python,Unix,Select,Pipe,Waitpid,我的python程序创建一个管道、分叉,然后从子管道中生成另一个程序。然后,父级坐着等待管道的读取器端变得可读 读写器=os.pipe fcntl.fcntlreader,fcntl.F_SETFL,os.O_非块 child=os.fork 如果子项==0: closereader操作系统 os.execvp'program',['program','-o','/dev/fd/%d'%writer] 尽管如此: 如果os.waitpidchild,os.WNOHANG!=0, 0: 打破 lo

我的python程序创建一个管道、分叉,然后从子管道中生成另一个程序。然后,父级坐着等待管道的读取器端变得可读

读写器=os.pipe fcntl.fcntlreader,fcntl.F_SETFL,os.O_非块 child=os.fork 如果子项==0: closereader操作系统 os.execvp'program',['program','-o','/dev/fd/%d'%writer] 尽管如此: 如果os.waitpidchild,os.WNOHANG!=0, 0: 打破 logger.debug“进入选择” r、 w,x=选择。选择[读取器],[] .....
由于某些原因,当繁殖子项退出时,父项继续在选择中等待。。。无限期地如何检测这种情况?

由于父进程的写入程序在进行选择之前未关闭,因此存在死锁。您还可以在父进程中关闭写入程序:

如果子项==0: closereader操作系统 ... 其他: 特写
您是否尝试关闭父选择中的写入程序可能被父选择的写入程序锁定?是的,就是这样。。。我回到这里来报道,看到了你的评论。如果你回答得恰当,我就接受。谢谢好的,那我就写下来作为回答: