我有一个python脚本,我想启动一个独立的守护进程。我想调用ym python脚本,启动这个系统托盘守护进程,在一个数据库文件上做一些python魔术,然后退出,让系统托盘守护进程继续运行。我试过os.system,subprocess.call,subprocess.Popen,os.execl,但它总是让我的脚本保持活动状态,直到我关闭系统托盘守护进程。这听起来应该是一个简单的解决方案,但我不能得到任何工作。
os.system
subprocess.call
subprocess.Popen
os.execl
2cmtqfgy1#
您可以使用两个漂亮的Popen参数在Windows上完成一个真正的分离进程(感谢greenhat的answer here):
Popen
import subprocess DETACHED_PROCESS = 0x00000008 results = subprocess.Popen(['notepad.exe'], close_fds=True, creationflags=DETACHED_PROCESS) print(results.pid)
另请参见this answer,了解一个漂亮的跨平台版本(确保添加close_fds,因为它对Windows至关重要)。
close_fds
avwztpqn2#
适用于Windows的解决方案:第一个月工作起来就像你双击了一个可执行文件,并导致它独立启动。一个非常方便的一行程序。http://docs.python.org/library/os.html?highlight=startfile#os.startfile
izkcnapc3#
我建议使用双叉法。示例:
import os import sys import time def main(): fh = open('log', 'a') while True: fh.write('Still alive!') fh.flush() time.sleep(1) def _fork(): try: pid = os.fork() if pid > 0: sys.exit(0) except OSError, e: print >>sys.stderr, 'Unable to fork: %d (%s)' % (e.errno, e.strerror) sys.exit(1) def fork(): _fork() # remove references from the main process os.chdir('/') os.setsid() os.umask(0) _fork() if __name__ == '__main__': fork() main()
3条答案
按热度按时间2cmtqfgy1#
您可以使用两个漂亮的
Popen
参数在Windows上完成一个真正的分离进程(感谢greenhat的answer here):另请参见this answer,了解一个漂亮的跨平台版本(确保添加
close_fds
,因为它对Windows至关重要)。avwztpqn2#
适用于Windows的解决方案:第一个月
工作起来就像你双击了一个可执行文件,并导致它独立启动。一个非常方便的一行程序。
http://docs.python.org/library/os.html?highlight=startfile#os.startfile
izkcnapc3#
我建议使用双叉法。
示例: