การค้นหา systemd หน่วย 'เป็นเจ้าของ' กระบวนการ daemon ที่ทำงานอยู่


25

ในการแก้ปัญหา JACK / Pulseaudio ฉันต้องการเข้าใจว่าเมื่อใดและเพราะเหตุใด pulseaudio daemon เริ่มต้นโดย systemd (บน Fedora)

โดยใช้:

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

ฉันเห็นว่า pulseaudio daemon กำลังเริ่มต้นโดย systemd (pid = 1)

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

แต่ผมก็ไม่สามารถที่จะหาไฟล์หน่วยในระบบของฉันที่มีหรือแม้เพียงแค่pulseaudiopulse

คำถามเฉพาะของฉันคือ:

A) มีวิธีการตรวจสอบหน่วย systemd ที่ทำให้เกิดการสร้างกระบวนการเฉพาะ (ในตัวอย่างของฉันผลลัพธ์ 2738 กระบวนการภูต PA)?

B) มีวิธีอื่นในการค้นหาว่าการพึ่งพาหน่วยหรือการตั้งค่าอื่น ๆ ของ systemd ส่งผลให้เกิดการเรียกใช้/usr/bin/pulseaudio --startหรือไม่?

คำตอบ:


24

A) มีวิธีการตรวจสอบหน่วย systemd ที่ทำให้เกิดการสร้างกระบวนการเฉพาะ (ในตัวอย่างของฉันผลลัพธ์ 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


1
ฉันต้องการหาวิธีเขียนสคริปต์นี้ systemctlมี--propertyตัวเลือกสำหรับการเลือกคุณสมบัติของหน่วยที่จะแสดง แต่น่าเสียดายที่มันใช้งานได้เฉพาะกับshowไม่statusและshowไม่สามารถใช้งานได้กับ PID สิ่งที่ดีที่สุดที่ฉันจะทำได้คือ:systemctl status -n0 $PID 2>/dev/null | head -n1 | awk '{print $2}'
นีลเมย์ฮิว

@NeilMayhew ดูps -o unitคำตอบโดยLukáš สมมติว่าคุณอยู่ในระบบที่ทันสมัยและใช้งานได้มันเป็นสิ่งที่สวยงาม
rsaw

6

โดยวิธีที่คุณสามารถขอให้ ps แสดงหน่วย systemd ที่สอดคล้องกัน

[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ว่า "ถ้ามีการสนับสนุน systemd อยู่ด้วย" ดังนั้นฉันคิดว่ามันขึ้นอยู่กับระบบ
Neil Mayhew

! น่ากลัว และจะดียิ่งขึ้นด้วยป้อแป้ตัวเลือกเช่นps -C CMD ps -o pid,args,unit -C pulseaudio
rsaw

4

หมายเหตุโปรเซสที่มี PPID พาเรนต์ 1 ไม่ได้หมายความว่ามันถูกสร้างโดย systemd กระบวนการใด ๆ ที่สูญเสียกระบวนการหลักจะได้รับการกำหนดใหม่โดยอัตโนมัติ 1

คุณสามารถดูลำดับชั้นของกระบวนการ systemd ด้วย

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.