0

私はこのコードを使用しています

p1 = Popen(['rtmpdump'] + cmd_args.split(' '), stdout=PIPE)
p2 = Popen(player_cmd.split(' '), stdin=p1.stdout, stderr=PIPE)
p2.wait()
# try to kill rtmpdump
# FIXME: why is this not working ?
try:
    p2.stdin.close()
    p1.stdout.close()
    p1.kill()
except AttributeError:
    # if we use python 2.5
    from signal import SIGTERM, SIGKILL
    from os import kill
    kill(p1.pid, SIGKILL)

終了するとp1、それp2も終了します。

問題は:

手動でp2(mplayer)を閉じても、rtmpdump/p1はまだ実行されています。上記のような色々なことを試しましたが、それでも殺せません。を追加してみましclose_fds=Trueた。

そのため、rtmpdumpはまだstdoutに書き込もうとしている可能性があります。しかし、なぜこれがkill()を失敗させるのですか?

完全なソースコード:http://github.com/solsticedhiver/arte-7.py

4

1 に答える 1

0

これが修正です。ゾンビプロセスを本当に殺すために後で電話wait()してくださいkill()

# kill the zombie rtmpdump
try:
  p1.kill()
  p1.wait()
except AttributeError:
    # if we use python 2.5
    from signal import SIGKILL
    from os import kill, waitpid
    kill(p1.pid, SIGKILL)
    waitpid(p1.pid, 0)
于 2013-04-08T19:45:04.840 に答える