是否可以可靠地判断给定的 Linux 进程是否已启动或仍由 init.d 脚本、Upstart 或 systemd 监督?
答案1
使用 systemd,您可以通过查看某个进程所在的 cgroup 来找到它属于哪个 systemd 服务。
例如:
$ ps -eo pid,comm,cgroup | grep dhclient
6476 dhclient 8:devices:/system.slice NetworkManager.service,1:name=systemd:/system.slice/NetworkManager.service
会告诉您该dhclient
进程是 的一部分NetworkManager.service
,因此由 systemd 管理。
然而:
$ ps -eo pid,comm,cgroup | grep firefox
3302 firefox 8:devices:/user.slice,1:name=systemd:/user.slice/user-1000.slice/session-c2.scope
表明此 Firefox 进程是 UID 为 1000 的用户启动的会话的一部分。
由 initscripts 或 Upstart 作业启动的进程与其他手动启动的后台进程没有区别。