Можно ли достоверно определить для определенного процесса Linux, был ли он запущен или все еще контролируется скриптом init.d, Upstart или systemd?
решение1
С помощью systemd вы можете определить, к какой службе 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, неотличимы от других фоновых процессов, запускаемых вручную.