मान लीजिए कि मैं ps axf
चलाते हैं और मैं देख सकता हूँ कि मेरे आदेश की प्रक्रिया पेड़ इस तरह दिखता है:बैश का उपयोग करके किसी दिए गए प्रक्रिया के शीर्ष-स्तर के पैरेंट पीआईडी को मैं कैसे ढूंढूं?
800 ? Ss 0:00 /usr/sbin/sshd
10186 ? Ss 0:00 \_ sshd: yukondude [priv]
10251 ? S 0:00 \_ sshd: [email protected]/0
10252 pts/0 Ss 0:00 \_ -bash
10778 pts/0 S 0:00 \_ su -
10785 pts/0 S 0:00 \_ -su
11945 pts/0 R+ 0:00 \_ ps axf
मैं जानता हूँ कि मैं वर्तमान खोल के पीआईडी (10785) या $PPID
माता पिता पीआईडी के लिए के लिए जाँच कर सकते हैं $$
(10,778) ।
लेकिन मैं सिर्फ शीर्ष-स्तर के माता-पिता पीआईडी चाहता हूं, जो इस उदाहरण में 800 (एसएसएच डिमन) होगा। क्या आसानी से ऐसा करने का कोई तरीका है?
मैं this SO answer से सीखा है कि मैं रिकर्सिवली /proc/PID/stat
फ़ाइल में 4 प्रविष्टि की जांच कर सकते प्रत्येक प्रक्रिया के माता-पिता पीआईडी को खोजने के लिए:
# cut -f4 -d' ' /proc/10785/stat
10778
# cut -f4 -d' ' /proc/10778/stat
10252
# cut -f4 -d' ' /proc/10252/stat
10251
# cut -f4 -d' ' /proc/10251/stat
10186
# cut -f4 -d' ' /proc/10186/stat
800
# cut -f4 -d' ' /proc/800/stat
1
(शीर्ष स्तर के माता-पिता पीआईडी एक बस से पहले मैं init
तक पहुँचने के लिए किया जाएगा पीआईडी, यानी, 1.)
इससे पहले कि मैं थोड़ा लूप लिखूं (मुझे यह भी सुनिश्चित नहीं है कि आप बैश में रिकर्सन का उपयोग कर सकते हैं), क्या यह एक और अधिक सरल तरीका है जिसे मैं याद कर रहा हूं ? शायद /proc
के तहत फ़ाइल का एक और पैरामीटर? उन फ़ाइलों के माध्यम से grep
कुछ स्पष्ट नहीं दिखाया।
संपादित: बेशक, सभी लिनक्स प्रक्रियाओं के लिए उच्च-स्तरीय प्रक्रिया 1. की एक पीआईडी के साथ/sbin/init है क्या मैं चाहता हूँ सिर्फ इतना है कि पहले माता-पिता की पीआईडी है: अंत से पहले माता-पिता।
आपको इसके लिए रिकर्सन की आवश्यकता नहीं है, बस एक साधारण पाश ... – JanC
सच है, लेकिन रिकर्सन इतना अधिक मजेदार और कंप्यूटर-विज्ञान है। – yukondude
कोई रास्ता नहीं। लूप्स अधिक मौलिक हैं: पी न करें 'अपने सबसे बुनियादी उपकरण भूल जाओ। –