실행중인 데몬 프로세스를 '소유'하는 시스템 장치 찾기


25

JACK / Pulseaudio 문제를 디버깅하기 위해, 펄스 오디오 데몬이 systemd (Fedora에서) 시작되는시기와 이유를 알고 싶습니다.

사용 :

$ ps -o'pid,ppid,args' `pgrep pulse`

pulseaudio 데몬이 systemd (pid = 1)에 의해 시작되고 있음을 알았습니다.

 PID  PPID COMMAND
2738     1 /usr/bin/pulseaudio --start

그러나, 나는 들어 내 시스템의 모든 유닛 파일을 찾을 수 없습니다 pulseaudio또는 단지를 pulse.

내 구체적인 질문은 다음과 같습니다

A) 특정 프로세스 (내 예제 ​​출력, 프로세스 2738, PA 데몬)의 생성을 야기한 시스템 단위를 결정하는 방법이 있습니까?

B) 어떤 단위-의존적 체인 또는 다른 체계화 된 시스템 설정을 찾아내는 대안 적 접근이 /usr/bin/pulseaudio --start있는가?

답변:


24

A) 특정 프로세스 (내 예제 ​​출력, 프로세스 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

이것은 pulseaudiosystemd를 통해 명시 적으로가 아니라 내 데스크탑 로그인 세션에서 시작되었음을 알려줍니다 .


1
나는 이것을 스크립팅하는 방법을 찾고 싶었다. systemctl--property단위 속성을 표시하는 선택을위한 옵션을하지만 불행히도 이것은 단지와 함께 작동 show하지 statusshowPID를 함께 작업을하지 않습니다. 내가 생각해 낼 수있는 최선은 :systemctl status -n0 $PID 2>/dev/null | head -n1 | awk '{print $2}'
Neil Mayhew

@NeilMayhew ps -o unitLukáš의 답변 보기 당신이 현대 시스템에 있고 작동한다고 가정하면, 그것은 아름다운 것입니다.
rsaw

6

그런데 ps에게 해당 시스템 장치를 보여달라고 요청할 수 있습니다.

[lnykryn@notas]$ ps -o'pid,ppid,args,unit' `pgrep pulse`
  PID  PPID COMMAND                     UNIT
 1345     1 /usr/bin/pulseaudio --start session-1.scope

이것은 효과가 없으며 man ps"시스템화 된 지원이 포함 된 경우"라는 메시지가 표시됩니다. 따라서 시스템에 따라 다르다고 가정합니다.
Neil Mayhew

대박! 그리고 사용하지 않는 ps -C CMD옵션을 사용하면 더 좋습니다 ps -o pid,args,unit -C pulseaudio.
rsaw

4

부모 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

PPID == 1에 대한 오류를 지적 해 주셔서 감사합니다. 실제로 나는이 질문에 대해 생각할 때 이미 알고 있었고 잊어 버렸습니다.
neradis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.