有没有办法判断我的python脚本是否作为后台进程运行?我试图区分这两者:
sudo ./myscript.py
sudo ./myscript.py &
使用sys.argv
不起作用 - &符号显然不算作参数。以下是对以下内容的影响:
sudo python myscript.py
sudo python myscript.py &
我已经浏览了一下,但一切似乎都是关于从Python脚本中启动后台进程,而不是Python脚本本身是否是后台进程。谢谢!
编辑:如果正常启动,目的是输出消息(或不输出)即 "Press Ctrl+C to stop this script"
,但如果启动则不显示消息作为后台进程。
编辑2 我忽略了提到这个python脚本将由一个脚本启动
/etc/init.d
而不是终端提示。所以标记为正确的答案确实回答了我所说的问题以及给出的信息,但我想我应该指出它在init.d
情景中不起作用,以避免任何可能的混淆。将来
答案 0 :(得分:6)
基于the answer for C @AaronDigulla在评论中指出:
import os
import sys
def main():
if os.getpgrp() == os.tcgetpgrp(sys.stdout.fileno()):
print 'Running in foreground.'
else:
print 'Running in background.'
if __name__ == '__main__':
main()
答案 1 :(得分:1)
基于来自this的bash解决方案回答:
import os
import subprocess
pid = os.getpid()
if "+" in subprocess.check_output(["ps", "-o", "stat=", "-p", str(pid)]):
print "Running in foreground"
else:
print "Running in background"
答案 2 :(得分:0)
我在其他方面看到了其他解决方案,并决定编写一个纯python解决方案。它从/proc/<pid>/stat
读取而不是调用子流程。
from os import getpid
with open("/proc/{}/stat".format(getpid())) as f:
data = f.read()
foreground_pid_of_group = data.rsplit(" ", 45)[1]
is_in_foreground = str(getpid()) == foreground_pid_of_group
可以找到统计文件列的含义here