Python的守护进程PPID不等于1
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python的守护进程PPID不等于1,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2120字,纯文字阅读大概需要4分钟。
内容图文
![Python的守护进程PPID不等于1](/upload/InfoBanner/zyjiaocheng/966/3859c9af33234e4db7fd4800c7dfd938.jpg)
在Linux中创建守护进程是quite complex问题,但它在daemon(7) manual中有很好的文档.值得庆幸的是,有用于Python 2的python-daemon模块和用于实现PEP3143的3,所以我正在使用它.
问题出在这里:当我玩python-daemon模块时,我很惊讶守护进程的PPID不是1.为什么?
简单的例子:
import daemon
import time
import os
with open('/tmp/test.log', 'w') as logfile:
c = daemon.DaemonContext(stdout=logfile)
with c:
print('In daemon...')
for i in range(10):
print('My PID is {}, PPID is {}'.format(os.getpid(), os.getppid()))
time.sleep(2)
启动上述脚本20秒后test.log的内容(建议tail -f /tmp/test.log):
In daemon...
My PID is 31397, PPID is 1736
My PID is 31397, PPID is 1736
My PID is 31397, PPID is 1736
My PID is 31397, PPID is 1736
My PID is 31397, PPID is 1736
My PID is 31397, PPID is 1736
My PID is 31397, PPID is 1736
My PID is 31397, PPID is 1736
My PID is 31397, PPID is 1736
My PID is 31397, PPID is 1736
原来,PID 1736的过程是/lib/systemd/systemd:
patryk@mycomp:/tmp$ps -fq 1736
UID PID PPID C STIME TTY TIME CMD
patryk 1736 1 0 kwi12 ? 00:00:00 /lib/systemd/systemd --user
最近我在C(在安装了systemd的同一台机器上)实现守护进程,而AFAIR所有守护进程都有PPID = 1.我遇到的所有手册都提到守护进程的PPID始终是1.
systemd改变了吗? systemd是否为所有进程处理awaits – 包括守护进程?是守护进程的正确行为吗?
相关问题:
> How do you create a daemon in Python?
> How do I set up a daemon with python-daemon?
> How to make a Python script run like a service or daemon in Linux
> Python 3.3.4: python-daemon-3K ; How to use runner
解决方法:
简短的回答是:没关系.
重要的是,所有守护进程都有一个像init这样的父进程,通过调用wait()会在子进程死亡时收获它们.否则,该过程将在退出时变为僵尸.
将父PID设置为1并没有什么特别之处.您链接到的手册页说明这个过程对于旧的SysV风格的守护进程是PID 1,但对于新的SystemD风格的守护进程则没有这样说. init始终作为PID 1运行,而传统上它是守护进程的父级.但它不需要如此.
systemd --user管理用户服务.因此,当您运行它(作为用户)时,为什么这个进程成为您的守护进程的父进程是有道理的.
在阅读关于* nix的文档时必须要小心,这个平台已经存在了几十年.事情发生变化,手册变得过时,或者可能在错误的环境中被解释. SystemD为Linux平台带来了很多重大变化.
内容总结
以上是互联网集市为您收集整理的Python的守护进程PPID不等于1全部内容,希望文章能够帮你解决Python的守护进程PPID不等于1所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。