읽기/대기 교착 상태 [닫기]

읽기/대기 교착 상태 [닫기]

내 프로세스가 중단되었습니다. 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

parent.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()

children.py

import sys
l = list()
for line in sys.stdin:
   l.append(line)
sys.stdout.write(str(len(l)))

실행하세요:

$ python parent.py 
  99999

정상적으로 작동하는 것 같으니 문제는 다른 곳에 있는 것 같습니다.

관련 정보