【发布时间】:2018-12-15 11:17:18
【问题描述】:
我正在后台运行一个与父程序分离的子程序。在我退出父程序后,我希望子程序继续运行并登录到OUTPUT_PATH。事实上,我可以看到日志文件正在更新。然而,当我试图从ps aux 中找到 PID 时,我找不到它。谁能解释这种行为?我做错了什么?
shellCommand = "nohup python PYTHON_PROGRAM ARGS >OUTPUT_PATH 2>&1 &"
subprocess.Popen(shellCommand, shell=True, preexec_fn=os.setpgrp)
【问题讨论】:
-
您确定您只是没有错过吗?我试过你的剪报,对我来说
PYTHON_PROGRAM是runner.py。当我运行ps -fwp $(pgrep -f runner.py)时,我看到了这个过程。难道只是它不在列表的底部或容易发现的地方吗?我还应该提到这是派生后台进程的一种非正统方式。 ;) -
首先,非常感谢!这很奇怪......我使用的是子进程模块返回的 PID,它返回 15789,运行命令的 PID 是 15790。你知道这种差异的原因吗?另外你能详细说明什么是更正统的方法吗?
-
你使用
shell=True,这意味着python创建了一个shell进程,并且该shell在另一个进程中执行命令
标签: python subprocess pid nohup