如何在python中生成一个完全分离的进程?

2024-04-28 09:55:38 发布

您现在位置:Python中文网/ 问答频道 /正文

!!!子流程对我不起作用

我想将python脚本daemon.py作为守护进程运行。需要从另一个名为starter.py的脚本激活此脚本

要求:

  1. starter.py不应等待daemon.py完成。在starter.py中使用fork()可以满足此要求
import os

pid = os.fork()
if pid == 0:
   os.system("python daemon.py")

这满足了第一个要求,但仍然面临一个问题,这就引出了第二个要求

  1. daemon.py即使我退出{},也应该继续运行。使用fork无法满足此要求

然后我尝试使用subprocess,正如这里的答案所建议的Python spawn off a child subprocess, detach, and exit

import subprocess

subprocess.Popen(['python', 'daemon.py'],
                 cwd="/",
                 stdout=None,
                 stderr=None)

这也有同样的问题。当我退出starter.py时,daemon.py也会停止。 我正在daemon.py上使用SIGTERM事件侦听器。它正在收听来自starter.py的事件。因此,问题就来了

daemon.py看起来像这样

import sys
import signal

def handler():
    other_business()
    sys.exit(0)

while True:
     business()
     signal.signal(signal.SIGTERM, handler)
     try:
         time.sleep(1)
     except KeyboardInterrupt:
         exit()

PYTHON版本:3.5.2

如何完全独立于starter.py运行daemon.py


Tags: pyimport脚本nonesignalossysexit