是否可以可靠地判斷給定的 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 作業啟動的程序與其他手動啟動的後台程序沒有區別。