A) Có cách nào để xác định đơn vị systemd gây ra việc tạo ra một quy trình cụ thể (trong đầu ra ví dụ của tôi, quy trình 2738, daemon PA) không?
Chắc chắn rồi. Bạn có thể chạy systemctl status <pid>
và systemd sẽ tìm cho bạn đơn vị chứa PID đó. Ví dụ, trên hệ thống của tôi, tôi tìm thấy một dnsmasq
quy trình:
# ps -fe | grep dnsmasq
nobody 18834 1193 0 Aug25 ? 00:00:10 /usr/sbin/dnsmasq ...
Ai bắt đầu nó?
# 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 --...
Tôi cũng có một pulseaudio
quy trình:
# ps -fe | grep pulseaudio
lars 2948 1 0 Aug25 ? 00:06:20 /usr/bin/pulseaudio --start
Chạy systemctl status 2948
, tôi thấy:
● 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
Điều này cho tôi biết pulseaudio
đã được bắt đầu từ phiên đăng nhập máy tính để bàn của tôi, chứ không phải rõ ràng thông qua systemd.
systemctl
có một--property
tùy chọn để chọn các thuộc tính đơn vị nào sẽ hiển thị, nhưng thật không may, điều này chỉ hoạt động vớishow
khôngstatus
vàshow
không hoạt động với các PID. Điều tốt nhất tôi có thể nghĩ ra là:systemctl status -n0 $PID 2>/dev/null | head -n1 | awk '{print $2}'