Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使子进程在服务关闭后生存?_Python_Systemd_Nohup - Fatal编程技术网

Python 如何使子进程在服务关闭后生存?

Python 如何使子进程在服务关闭后生存?,python,systemd,nohup,Python,Systemd,Nohup,脚本1.py: 脚本2.py: 此scipt始终与loop.run\u一起运行 当script1作为服务运行时,此脚本将正确运行script2。 但如果我用“kill pid”命令杀死Script1,Script2也会自动被杀死,我不希望这样,我希望Script2继续工作 编辑:我使用systemd运行script1.py如果您不希望systemd终止您开始的子进程,请更改为您的服务配置的KillMode。因此,在您的服务文件中: [Service] KillMode=process 默认值为

脚本1.py:

脚本2.py: 此scipt始终与loop.run\u一起运行

当script1作为服务运行时,此脚本将正确运行script2。 但如果我用“kill pid”命令杀死Script1,Script2也会自动被杀死,我不希望这样,我希望Script2继续工作


编辑:我使用systemd运行script1.py

如果您不希望systemd终止您开始的子进程,请更改为您的服务配置的KillMode。因此,在您的服务文件中:

[Service]
KillMode=process

默认值为KillMode=controlgroup,这样systemd会终止它为服务创建的cgroup中的所有内容;nohup对cGroup一无所知。

您使用的是哪种特定的过程监控系统?如果是systemd,f/e,则有关于如何杀死儿童的可配置选项。如果您使用的任何进程监控系统都关闭了整个cgroup,那么nohup不会做任何事情来切换cgroup,所以您就是这样。顺便说一句,使用os.system通常是不受欢迎的-子进程模块是一个严格的超集:它可以做os.system可以做的任何事情,更重要的是,它可以不调用shell;如果xxx、yyy或zzz由用户控制,则上述代码容易出现严重的安全问题;要在仍然使用shell的情况下修复此问题,您需要在shlex.quotexxx中替换,而不仅仅是xxx。@charles duffy Hi谢谢,所以我使用subprocess。关于我的问题,我使用systemd,你能更全面地解释我应该做什么吗?请参阅systemd中的KillMode选项。将它设置为进程是最保守的选择,就最不可能杀死进程之外的东西的方法而言。如果您在问题中编辑了使用systemd的详细信息,我会将其添加为答案。谢谢,我编辑了
[Service]
KillMode=process