JACK / Pulseaudioの問題をデバッグするために、systemd(Fedoraで)がpulseaudioデーモンを起動するタイミングと理由を理解したいと思います。
使用:
$ ps -o'pid,ppid,args' `pgrep pulse`
systemd(pid=1) によって pulseaudio デーモンが起動するのを見ます。
PID PPID COMMAND
2738 1 /usr/bin/pulseaudio --start
しかし、システムpulseaudio
ではpulse
。
私の具体的な質問は次のとおりです。
A)特定のプロセス(例出力ではプロセス2738、PAデーモン)を生成したsystemdデバイスを確認する方法はありますか?
B)どのユニット依存性チェーンまたはsystemdの他の設定によってコールが発生したかを知るための別の方法はありますか/usr/bin/pulseaudio --start
?
答え1
A)特定のプロセス(例出力ではプロセス2738、PAデーモン)を生成したsystemdデバイスを確認する方法はありますか?
確かに。実行すると、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を介さずにデスクトップログインセッションで開始されたことを示します。
答え2
ちなみに、psに対応するシステムユニットを表示するように依頼することができます。
[lnykryn@notas]$ ps -o'pid,ppid,args,unit' `pgrep pulse`
PID PPID COMMAND UNIT
1345 1 /usr/bin/pulseaudio --start session-1.scope
答え3
親PPIDが1のプロセスに注意してください。それは意味しないsystemdによって生成されます。親プロセスを失ったすべてのプロセスは、自動的に親プロセス1に再割り当てされます。
次のコマンドを使用して、システムプロセスの階層を表示できます。
systemctl status
私に別のものを見せました(編集済み):
CGroup:
|-1 /usr/lib/systemd/systemd --system --deserialize 17
|-system.slice
`-user.slice
`-user-1000.slice
|-session-66.scope
| |-4108 /bin/dbus-launch --autolaunch ...
| |-4109 /bin/dbus-daemon --fork ...
| `-5985 /usr/bin/pulseaudio --start --log-target=syslog