特定の 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 ジョブによって起動されたプロセスは、手動で起動された他のバックグラウンド プロセスと区別できません。