【发布时间】:2020-09-28 18:14:33
【问题描述】:
script1.py:
#do somthing
os.system('nohup python3 -u script2.py {} {} >> {}.out &'.format(xxx, yyy, zzz))
#do somthing
script2.py:
此 scipt 始终使用 loop.run_forever()
当 script1 作为服务运行时,此脚本正确运行 script2。 但是如果我用 'kill pid' 命令杀死 Script1,Script2 也会被自动杀死,这是我不希望的,我希望 Script2 继续工作。
编辑:我使用systemd 运行script1.py
【问题讨论】:
-
您使用的是哪个具体的流程监管系统?如果它是 systemd,f/e,则有关于如何杀死孩子的可配置选项。如果您正在使用的任何进程监控系统正在关闭整个 cgroup,
nohup不会做任何事情来切换 cgroup,所以您就可以了。 -
顺便说一句,使用
os.system通常是不受欢迎的——subprocess模块是一个严格的超集:它可以做任何事情os.system可以做很多事情,很多更多(包括,重要的是,不调用 shell;如果xxx、yyy或zzz是用户控制的,则上面的代码容易出现严重的安全问题;要在仍然使用 shell 的同时解决这个问题,您需要替换在shlex.quote(xxx),而不仅仅是xxx)。 -
@charles-duffy 嗨,谢谢,所以我使用子进程。还有关于我的问题,我使用 systemd 你能更全面地解释一下我应该怎么做吗?
-
查看 systemd 中的
KillMode选项。将其设置为process是最保守的选择,就最不可能杀死除您自己的进程之外的事物而言的方法而言。如果您在问题中编辑您使用 systemd 的详细信息,我会将其添加为答案。 -
谢谢,我编辑了