Я работаю над изящной маленькой функцией:
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.Кажется, он всегда на 1 ниже, чем правильный PID.Например, он говорит, что процесс начался в 31729, но ps
говорит, что он работает в 31730. Каждый раз, когда я пробовал отключить его на 1. Я предполагаю, что PID, который он возвращает, является PID current процесс, а не запущенный, и новый процесс получает «следующий» pid, который на 1 выше.Если это так, я не могу просто полагаться на возвращение process.pid + 1
, поскольку у меня нет гарантии, что оно всегда будет правильным.
Почему process.pid
не возвращает PID нового процессаи как я могу добиться того поведения, за которым я следую?