실행 중인 데몬을 "소유"하는 시스템 장치 찾기

실행 중인 데몬을 "소유"하는 시스템 장치 찾기

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

관련 정보