を取得:はpopenのでプロセスを開くと、私は気の利いた小さな機能に取り組んでいるPID
def startProcess(name, path):
"""
Starts a process in the background and writes a PID file
returns integer: pid
"""
# Check if the process is already running
status, pid = processStatus(name)
if status == RUNNING:
raise AlreadyStartedError(pid)
# Start process
process = subprocess.Popen(path + ' > /dev/null 2> /dev/null &', shell=True)
# Write PID file
pidfilename = os.path.join(PIDPATH, name + '.pid')
pidfile = open(pidfilename, 'w')
pidfile.write(str(process.pid))
pidfile.close()
return process.pid
問題はprocess.pid
が正しいPIDではないということです。それは常に正しいPIDより1低いようです。例えば、それはプロセスが31729で始まったと言いますが、ps
は31730で動作していると言います。私が試したたびに、私はそれが返すPIDを推測しています。のPIDは現在です。 1つを開始し、新しいプロセスは1つ上位の '次の' pidを取得します。この場合、私はそれが常に正しいことを保証するものではないので、process.pid + 1
を返すことに頼るだけではありません。
なぜ、process.pid
が新しいプロセスのPIDを返さないのですか。後でどのように動作するのですか? http://docs.python.org/library/subprocess.htmlのドキュメントから
'shell = True'とあなたの'> 'を削除してみてください。 – Blender
私は同じ問題があり、難しい方法を見つけました。それは常にPID + 1ではなく、最初はありましたが、現在は+2を与えています – andrei