सिस्टमैड इकाई को खोजने के लिए एक चल रही डेमॉन प्रक्रिया 'मालिक' है


25

एक JACK / Pulseaudio समस्या को डीबग करने के लिए, मैं समझना चाहता हूं कि कब और क्यों pulseaudio डेमन को सिस्टमड (फेडोरा पर) शुरू किया गया है।

का उपयोग करते हुए:

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

मैं देखता हूं कि पल्सेडियो डीमन सिस्टमड (pid = 1) द्वारा शुरू किया जा रहा है

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

हालाँकि, मैं अपने सिस्टम पर pulseaudioया यहां तक ​​कि सिर्फ किसी भी यूनिट-फाइल को खोजने में असमर्थ था pulse

मेरे विशिष्ट प्रश्न हैं:

ए) क्या प्रणालीगत इकाई को निर्धारित करने का एक तरीका है जो एक विशिष्ट प्रक्रिया (मेरे उदाहरण आउटपुट, प्रक्रिया 2738, पीए डेमॉन) के निर्माण का कारण बना?

ख) क्या यह पता लगाने के लिए वैकल्पिक तरीके हैं कि किस इकाई-निर्भरता श्रृंखला या सिस्टमड की अन्य सेटिंग्स के परिणामस्वरूप चालान हुआ /usr/bin/pulseaudio --start?

जवाबों:


24

ए) क्या प्रणालीगत इकाई को निर्धारित करने का एक तरीका है जो एक विशिष्ट प्रक्रिया (मेरे उदाहरण आउटपुट, प्रक्रिया 2738, पीए डेमॉन) के निर्माण का कारण बना?

ज़रूर। आप चला सकते हैं systemctl status <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मेरे डेस्कटॉप लॉगिन सत्र से शुरू किया गया था, बजाय स्पष्ट रूप से सिस्टमड के।


1
मैं इसे स्क्रिप्ट करने का एक तरीका खोजना चाहता था। systemctlएक है --propertyका चयन जो दिखाने के लिए इकाई की संपत्तियों के लिए विकल्प, लेकिन दुर्भाग्य से यह केवल के साथ काम करता showनहीं status, और showPIDs के साथ काम नहीं करता है। सबसे अच्छा मैं साथ आ सकता है:systemctl status -n0 $PID 2>/dev/null | head -n1 | awk '{print $2}'
नील मैय्यू

@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कहते हैं "अगर systemd समर्थन शामिल किया गया है।" इसलिए मुझे लगता है कि यह सिस्टम पर निर्भर है।
नील मैय्यू

बहुत बढ़िया! और underused ps -C CMDविकल्प के साथ और भी बेहतर होगा , जैसे ps -o pid,args,unit -C pulseaudio,।
rsaw

4

ध्यान दें, 1 की मूल PPID वाली प्रक्रिया का मतलब यह नहीं है कि यह 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.