А) Есть ли способ определить системный модуль, который вызвал создание определенного процесса (в моем примере выходных данных, процесс 2738, демон PA)?
Конечно. Вы можете запустить, systemctl status <pid>
и systemd найдет для вас устройство, содержащее этот PID. Например, в моей системе я нахожу dnsmasq
процесс:
# ps -fe | grep dnsmasq
nobody 18834 1193 0 Aug25 ? 00:00:10 /usr/sbin/dnsmasq ...
Кто это начал?
# systemctl status 18834
● NetworkManager.service - Network Manager
Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2015-08-25 11:07:40 EDT; 1 day 21h ago
Main PID: 1193 (NetworkManager)
Memory: 1.1M
CGroup: /system.slice/NetworkManager.service
├─ 1193 /usr/sbin/NetworkManager --no-daemon
├─ 1337 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-wlp3s0....
├─18682 /usr/libexec/nm-openvpn-service
├─18792 /usr/sbin/openvpn --remote ovpn-phx2.redhat.com 443 tcp --nobind --dev redhat --de...
└─18834 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --...
У меня также есть pulseaudio
процесс:
# ps -fe | grep pulseaudio
lars 2948 1 0 Aug25 ? 00:06:20 /usr/bin/pulseaudio --start
Бегу systemctl status 2948
, вижу:
● session-3.scope - Session 3 of user lars
Loaded: loaded (/run/systemd/system/session-3.scope; static; vendor preset: disabled)
Drop-In: /run/systemd/system/session-3.scope.d
└─50-After-systemd-logind\x2eservice.conf, 50-After-systemd-user-sessions\x2eservice.conf, 50-Description.conf, 50-SendSIGHUP.conf, 50-Slice.conf
Active: active (running) since Tue 2015-08-25 11:09:23 EDT; 1 day 21h ago
CGroup: /user.slice/user-1000.slice/session-3.scope
Это говорит мне о том, что он pulseaudio
был запущен из моего сеанса входа в систему, а не явно через systemd.
systemctl
имеет--property
возможность выбрать, какие свойства объекта показывать, но, к сожалению, это работает только сshow
notstatus
иshow
не работает с PID. Лучшее, что я мог придумать, это:systemctl status -n0 $PID 2>/dev/null | head -n1 | awk '{print $2}'
ps -o unit
ответ Лукача . Предполагая, что вы работаете в современной системе, и она работает, это прекрасно.Кстати, вы можете попросить ps показать соответствующий системный модуль.
источник
man ps
написано "если включена поддержка systemd". Поэтому я предполагаю, что это зависит от системы.ps -C CMD
опцией, например,ps -o pid,args,unit -C pulseaudio
.Обратите внимание, что процесс с родительским PPID 1 не означает, что он был создан systemd. Любой процесс, который теряет свой родительский процесс, автоматически переназначается родительскому процессу 1.
Вы можете увидеть иерархию системных процессов с
который показывает для меня среди других вещей (отредактировано):
источник