कमांड लाइन से जीएनयू / लिनक्स में किसी दिए गए प्रक्रिया के मूल पीआईडी ​​कैसे प्राप्त करें?


90

पूछे जाने से पहले हल: cat /proc/1111/status | grep PPid


तेज: grep PPid status |cut -f2जैसे में time(for((i=0;i<1000;i++));do grep PPid status |cut -f2 >/dev/null;done); आश्चर्य है कि अगर वहाँ भी तेजी से कुछ है?
कुंभ

1
@AquariusPower जब से आप पूछते हैं, frerep grep से तेज है। fgrep PPid status |cut -f2
jbo5112

सेड, ग्रेप और कट की तुलना में तेज़ है:sed -rn '/PPid/ s/^.*:\s+// p' < status
मैरिएन

जवाबों:


107

कमांड लाइन:

ps -o ppid= -p 1111

समारोह:

ppid () { ps -p ${1:-$$} -o ppid=; }

उपनाम (एक समारोह बेहतर है ):

alias ppid='ps -o ppid= -p'

स्क्रिप्ट:

#!/bin/sh
pid=$1
if [ -z $pid ]
then
    read -p "PID: " pid
fi
ps -p ${pid:-$$} -o ppid=

यदि फ़ंक्शन या स्क्रिप्ट को कोई पीआईडी ​​आपूर्ति नहीं की जाती है, तो वे वर्तमान प्रक्रिया के पीपीआईडी ​​को दिखाने के लिए डिफ़ॉल्ट रूप से हैं।

उपनाम का उपयोग करने के लिए, एक पीआईडी ​​की आपूर्ति की जानी चाहिए।


=चिह्न कम से कम पर ओएस एक्स 10.8.2, आवश्यक नहीं है।
jtbandes

5
@jtbandes: यहां इस्तेमाल किया गया समान चिह्न हेडर लाइन ( लिनक्स और ओएस एक्स ) के आउटपुट को दबा देता है ।
डेनिस विलियमसन

13

यह उन चीजों में से एक है जो मैं सीखता हूं, भूल जाता हूं, राहत देता हूं, दोहराता हूं। लेकिन यह उपयोगी है। Pstree कमांड का 's' झंडा N पर एक पत्ती के साथ एक पेड़ दिखाता है:

pstree -sA $(pgrep badblocks)
systemd---sudo---mkfs.ext4---badblocks

12

पैरेंट पीड शेल चर PPID में है, इसलिए

echo $PPID

1
हां, लेकिन 1. मैं अन्य प्रक्रिया के माता-पिता को चाहता हूं, 2. मैं चाहता हूं कि सभी पूर्वजों को जड़ से उखाड़ फेंकने में सक्षम होना चाहिए।
वि।

1
दूसरी ओर, उपयोग $PPIDकरने से मुझे उस समस्या का हल मिल गया जो Google ने इस पृष्ठ को एक उत्तर के रूप में सुझाया था।
पॉल व्हिटकेकर

12

PPIDसभी प्रक्रियाओं की मूल आईडी ( ) प्रिंट करने के लिए , इस कमांड का उपयोग करें:

ps j

एकल प्रक्रिया के लिए, बस पीआईडी ​​पास करें, जैसे ps j 1234:।

केवल मान निकालने के लिए awk, जैसे फ़िल्टर आउटपुट :

ps j | awk 'NR>1 {print $3}' # BSD ps
ps j | awk 'NR>1 {print $1}' # GNU ps

सभी माता-पिता के पीआईडी ​​को सूचीबद्ध करने के लिए, इसका उपयोग करें pstree(इसे स्थापित करें यदि आपके पास नहीं है):

$ pstree -sg 1234
systemd(1)───sshd(1036)───bash(2383)───pstree(3007)

वर्तमान प्रक्रिया के मूल पीआईडी ​​पाने के लिए, का उपयोग करें echo $$


1
pstreeयहाँ मैंने देखा है सबसे अच्छा है।
sudo

ps jबहुत अच्छा है क्योंकि यह कई डिस्ट्रोस पर उपलब्ध है और आसानी से रचना योग्य है
कॉनर मैककॉर्मिक

6

पढ़ें / खरीद / $ पीआईडी ​​/ स्थिति। आसानी से लिपिबद्ध किया जा सकता है:

#! / Bin / श
पी = $ 1
अगर [-z "$ पी"]; फिर
    पी पढ़ें
फाई
cat / proc / "$ P" / स्थिति | grep PPid: | grep -o "[0-9] *"

2
grep '^PPid:' /proc/$1/status | grep -o '[0-9]*'आपको जो चाहिए वह यह है। (यह बात करने के लिए यूनिक्स उपकरणों के लिए बहुत ही असामान्यif [ -z ]; then read है।)
विशाल

@ शुद्धता यह करने में मदद करती है जैसेecho $$ | ppid | ppid | ppid
vi।

2
UUOC बिल्ली का बेकार उपयोग
फेलिप अल्वारेज़

@FelipeAlvarez, मेरे हाथ टाइप करने के लिए उपयोग नहीं किए जाते हैं < /some/file grep | grep | ...
वि।

2
किस बारे मेंgrep /some/file
फेलिप अल्वारेज़


2
$ ps -p $(ps -p $(echo $$) -o ppid=) -o comm=
    tmux

थोड़ा और अधिक जटिल उदाहरण जो वर्तमान प्रक्रिया को शुरू करने वाले माता-पिता की कमान की जांच करता है, पूरा कमांड देखने के लिए = = cmd पर कॉम शुरू करें


गूंज का बेकार उपयोग ? ;)
बॉबबोगो

यह वास्तव में कुछ टर्मिनलों पर आवश्यक है। सच कहूं तो मुझे ठीक से याद नहीं है लेकिन यह वास्तव में एक समस्या है। : D
sebastian_t


1

topआप जो भी विकल्प चाहते हैं, जैसे चलाएं -u username and -p PID

और topकाम करते समय प्रेस f, यह उन विकल्पों की एक सूची दिखाता है जिन्हें आप topआउटपुट में प्रदर्शित करना चाहते हैं , और प्रदर्शित पैरामीटर कैपिटल अक्षरों में दिखाए जाएंगे और जो पैरामीटर प्रदर्शित नहीं कर रहे हैं या जो छोटे अक्षरों में दिखाए जाएंगे।

इसलिए पैरामीटर से पहले पत्र दर्ज करके आप इसे सक्षम या अक्षम कर सकते हैं। मूल प्रक्रिया आईडी के लिए आपको दर्ज करना होगा bऔर फिर प्रेस Enterकरना होगा, यह शीर्ष आउटपुट में पीपीआईडी ​​प्रदर्शित करेगा।


1
इसका उपयोग गैर-संवादात्मक रूप से किया जाना है। मुझे पहले से पता है कि htopआप PPIDकॉलम को कॉन्फ़िगर कर सकते हैं ।
वि।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.