【发布时间】:2011-12-20 20:30:10
【问题描述】:
我正在开发一个漂亮的小功能:
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。我猜它返回的 PID 是 current 进程,而不是启动的进程,并且新进程获得高 1 的“下一个”pid。如果是这种情况,我不能仅仅依靠返回process.pid + 1,因为我不能保证它总是正确的。
process.pid为什么不返回新进程的PID,如何实现我所追求的行为?
【问题讨论】:
-
尝试删除
shell=True和你的>东西。 -
我有同样的问题,我发现了一个艰难的方法,它并不总是 PID+1,一开始是,但现在它给了我 +2
-
@Hubro 我想在我自己的一些代码中使用这个漂亮的函数!您介意为
processStatus()发布您的代码吗? -
@Jordan 太久了,抱歉。我什至不知道我写这个是为了什么。
标签: python subprocess popen