3
サブプロセスPID(Popen.pid
)がps
コマンドから返される値と異なるのはなぜですか?サブプロセスPIDがps出力と異なる
ps
は、内部でPython(subprocess.call()
)と別の端末の両方から呼び出されたときに気づいたことがあります。
ここでテストする簡単なPythonのファイルです:
#!/usr/bin/python3
'''
Test subprocess termination
'''
import subprocess
command = 'cat'
#keep pipes so that cat doesn't complain
proc = subprocess.Popen(command,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.PIPE,
shell=True)
print('pid = %d' % proc.pid)
subprocess.call("ps -A | grep -w %s" % command,
shell=True)
proc.terminate()
proc.wait() # make sure its dead before exiting pytyhon
通常ps
によって報告されたPIDはPopen.pid
によって報告されたものより1または2以上です。
私のMacで働いた。 'ps'出力に' grep command' pidがないのは確かですか?私のMacで 'ps -A | grep'は 'cat'、'/bin/sh -c ps -A |という3つのプロセスをリストアップします。 grep -w cat'、 'grep -w cat'です。 – khachik
私はちょうど実現しました - おそらく 'Popen.pid'はシェルプロセスのIDです。ps | grep' cat'のPIDを報告しますか? – khachik
それは 'shell = True'でした。誰かが答えを投稿しましたが、もうここにいるようには見えません...誰でもそれを再投稿して受け入れることができます。 – Matthew