Как сделать так, чтобы процессы не умирали после его родительского выхода в python? - PullRequest
0 голосов
/ 02 июня 2019

У меня есть этот тестовый код в Python:

import os
from multiprocessing import Process

import time
def testfunc():
  os.setsid()
  time.sleep(60)

p = Process(target=testfunc, args=())
p.daemon=tru
p.start()
#p.join()
#print(p)
print(p.ident)
exit()

и когда я запускаю программу и останавливаю родительский процесс, дочерний процесс останавливает буксировку. так есть ли способ заставить процессы не умереть после родительского выхода без использования метода fork?

1 Ответ

0 голосов
/ 02 июня 2019

документация состояния -

Когда процесс завершается, он пытается завершить все свои демонические дочерние процессы.

Возможно, вам нужно что-то вроде this (пример по ссылке) -

with open(os.devnull, 'r+b', 0) as DEVNULL:
    p = Popen(['/usr/bin/python25', '/path/to/long_process.py'],
              stdin=DEVNULL, stdout=DEVNULL, stderr=STDOUT, close_fds=True)
time.sleep(1) # give it a second to launch
if p.poll(): # the process already finished and it has nonzero exit code
    sys.exit(p.returncode)

, который создаст вам независимый процесс. Также см. пакет python-daemon .

...