linux – 如何在systemd控制组之外启动进程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux – 如何在systemd控制组之外启动进程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1849字,纯文字阅读大概需要3分钟。
内容图文
![linux – 如何在systemd控制组之外启动进程](/upload/InfoBanner/zyjiaocheng/967/b50a429ecc194cc9bca747dcc2328644.jpg)
我有一个服务器进程(从systemd启动),可以启动更新过程.更新过程自我守护自身然后(理论上)用SIGTERM杀死服务器.我的问题是SIGTERM传播到更新过程,它是孩子们.
出于调试目的,更新过程只是休眠,我手动发送kill.
kill之前的PS输出示例:
1 1869 1869 1869 ? -1 Ss 0 0:00 /usr/local/bin/state_controller --start
1869 1873 1869 1869 ? -1 Sl 0 0:00 \_ ProcessWebController --start
1869 1886 1869 1869 ? -1 Z 0 0:00 \_ [UpdateSystem] <defunct>
1 1900 1900 1900 ? -1 Ss 0 0:00 /bin/bash /usr/local/bin/UpdateSystem refork /var/ttm/update.bin
1900 1905 1900 1900 ? -1 S 0 0:00 \_ sleep 10000
请注意,UpdateSystem位于单独的PGID和TPGID中. (< defunct>进程是守护进程的结果,并且(我认为)不是问题.)
UpdateSystem是一个bash脚本(虽然我可以很容易地使它成为一个C程序,如果这将有所帮助).从https://stackoverflow.com/a/29107686/771073获取守护程序代码后,有趣的是:
#############################################
trap "echo Ignoring SIGTERM" SIGTERM
sleep 10000
echo Awoken from sleep - presumably by the SIGTERM
exit 0
当我杀死1869(它将SIGTERM发送到state_controller服务器进程时,我的日志文件包含:
Terminating
Ignoring SIGTERM
Awoken from sleep - presumably by the SIGTERM
我真的想阻止SIGTERM被发送到睡眠过程.
(实际上,我真的想阻止它被发送到apt-get升级,这是通过系统停止ttm.service的道德等效来停止系统,并且ExecStop指定为/ bin / kill $MAINPID – 以防万一改变任何人的回答.)
这个问题是类似的,但是接受的答案(使用KillMode = process)对我来说效果不好 – 我想杀死一些子进程,而不是更新进程:
Can’t detach child process when main process is started from systemd
解决方法:
一种完全不同的方法是升级过程通过更新/ sys / fs / cgroup / systemd文件系统将其自身从服务组中删除.特别是在bash中:
echo $$> /sys/fs/cgroup/systemd/tasks
进程只属于一个控制组.将其PID写入根任务文件会将其添加到其他控制组,并将其从服务控制组中删除.
内容总结
以上是互联网集市为您收集整理的linux – 如何在systemd控制组之外启动进程全部内容,希望文章能够帮你解决linux – 如何在systemd控制组之外启动进程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。