çalışan bir daemon sürecine 'sahip' olan systemd birimini bulma


25

Bir JACK / Pulseaudio sorununda hata ayıklamak için, pulseaudio arka plan programının ne zaman ve neden başlatıldığını anlamak istiyorum (Fedora'da).

Kullanımı:

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

Pulseaudio daemonunun systemd tarafından başlatıldığını görüyorum (pid = 1)

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

Ancak, sistemimde herhangi bir ünite dosyasını bulamadım, pulseaudiohatta içeriyordum pulse.

Özel sorularım:

A) Belirli bir işlemin oluşturulmasına neden olan sistem birimini belirlemenin bir yolu var mı (benim örnek çıktımda, işlem 2738, PA daemon)?

B) Hangi birim bağımlılık zincirinin veya diğer sistem ayarlarının çağrılmasının sonuçlandığını bulmak için alternatif yaklaşımlar var /usr/bin/pulseaudio --startmı?

Yanıtlar:


24

A) Belirli bir işlemin oluşturulmasına neden olan sistem birimini belirlemenin bir yolu var mı (benim örnek çıktımda, işlem 2738, PA daemon)?

Emin. Kaçabilirsiniz systemctl status <pid>ve systemd size PID olduğunu içeren ünitesi bulacaksınız. Örneğin, sistemimde bir dnsmasqişlem buluyorum :

# ps -fe | grep dnsmasq
nobody   18834  1193  0 Aug25 ?        00:00:10 /usr/sbin/dnsmasq ...

Kim başlattı?

# 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 --...

Benim de bir pulseaudioişlemim var:

# ps -fe | grep pulseaudio
lars      2948     1  0 Aug25 ?        00:06:20 /usr/bin/pulseaudio --start

Koşuyorum systemctl status 2948, görüyorum:

● 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

Bu bana pulseaudioaçıkça sistemd üzerinden değil, masaüstü oturum açma oturumumdan başladığını söylüyor .


1
Bunu yazmanın bir yolunu bulmak istedim. systemctlBir sahiptir --propertybirim özellikleri göstermek için seçimi için bir seçenek, ancak ne yazık ki bu sadece çalışır showdeğil statusve showedilen PID işi yapmaz. systemctl status -n0 $PID 2>/dev/null | head -n1 | awk '{print $2}'
Neil Mayhew

@NeilMayhew ps -o unitLukáš tarafından verilen cevaba bakınız . Modern bir sistemde olduğunuzu ve çalıştığını varsayarsak güzel bir şey.
18'de

6

Bu arada ps'den ilgili sistem birimini göstermesini isteyebilirsiniz.

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

Bu benim için işe yaramıyor ve man ps"eğer sistem desteği eklenmişse" yazdığını fark ediyorum . Bu yüzden sisteme bağlı olduğunu varsayıyorum.
Neil Mayhew

Müthiş! Ve kullanılmayan ps -C CMDseçenekle daha da iyi olurdu , örneğin ps -o pid,args,unit -C pulseaudio.
18'de

4

Not: 1 ebeveyni PPID olan bir işlem, bunun sistemd tarafından yaratıldığı anlamına gelmez . Ana işlemini kaybeden herhangi bir işlem otomatik olarak ana 1'e yeniden atanır.

Sistemd süreçlerinin hiyerarşisini görebilirsiniz.

systemctl status

Bu benim için diğer şeylerin arasında (düzenlenmiş):

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 hakkındaki yanlışlığımı gösterdiğiniz için teşekkür ederiz == 1. Aslında bunu zaten biliyordum ve bu soruyu düşünürken unuttum.
neradis
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.