我的进程陷入僵局。master
看起来像这样:
p=Popen(cmd, stdin=PIPE, stdout=PIPE)
for ....: # a few million
p.stdin.write(...)
p.stdin.close()
out = p.stdout.read()
p.stdout.close()
exitcode = p.wait()
child
看起来像这样:
l = list()
for line in sys.stdin:
l.append(line)
sys.stdout.write(str(len(l)))
strace -p PID_master
显示卡master
在wait4(PID_child,...)
.strate -p PID_child
显示卡child
在read(0,...)
.
怎么可能?!
我做了close
,stdin
为什么还在child
读它?!
答案1
父级.py
from subprocess import Popen, PIPE
cmd = ["python", "child.py"]
p=Popen(cmd, stdin=PIPE, stdout=PIPE)
for i in range(1,100000):
p.stdin.write("hello\n")
p.stdin.close()
out = p.stdout.read()
p.stdout.close()
print(out)
exitcode = p.wait()
儿童.py
import sys
l = list()
for line in sys.stdin:
l.append(line)
sys.stdout.write(str(len(l)))
运行它:
$ python parent.py
99999
看起来这工作正常,所以问题一定是在其他地方。