私は気の利いた小さな機能に取り組んでいます:
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で実行されていると表示されます。試行するたびに1ずつオフになります。 currentプロセス、開始されたプロセスではなく、新しいプロセスは1つ高い 'next' pidを取得します。これが当てはまる場合、process.pid + 1
常に正しいことを保証するものではないので。
なぜprocess.pid
は、新しいプロセスのPIDを返します。そして、私が後の動作をどのように達成できますか?
http://docs.python.org/library/subprocess.html のドキュメントから:
Popen.pid子プロセスのプロセスID。
Shell引数をTrueに設定した場合、これは生成されたシェルのプロセスIDであることに注意してください。
Shell
がfalseの場合、期待どおりに動作するはずです。