क्या यह जानने का कोई तरीका है कि विशिष्ट प्रक्रिया के बच्चे कौन हैं? उदाहरण के लिए उन बच्चों को जो उनकी माता-पिता की आईडी है?
क्या यह जानने का कोई तरीका है कि विशिष्ट प्रक्रिया के बच्चे कौन हैं? उदाहरण के लिए उन बच्चों को जो उनकी माता-पिता की आईडी है?
जवाबों:
आप pstreeकमांड की तलाश कर रहे हैं ।
pstreeअपने आप में एक पेड़ के रूप में सभी प्रक्रियाओं को सूचीबद्ध करेगा (जैसे lsblkकरता है)। आप -pPID को सूचीबद्ध -sकरने के लिए और मूल प्रक्रिया दिखाने के लिए ध्वज का उपयोग कर सकते हैं :
$ pstree -p 602
udisksd(602)-+-{cleanup}(607)
|-{gdbus}(605)
|-{gmain}(603)
`-{probing-thread}(606)
बच्चे को पीआईडी प्राप्त करने का ए (शायद) पॉसक-संगत तरीका (जो मैंने कहीं और टिप्पणियों में उल्लेख किया है):
ps -o ppid= -o pid= -A | awk '$1 == <some pid>{print $2}'
यह psसभी प्रक्रियाओं के माता-पिता पीआईडी और पीआईडी लिखने के लिए कहता है (शीर्षकों के बिना), और फिर awkयह देखने के लिए कि कौन सी पंक्तियों में पहले क्षेत्र (मूल पीआईडी) में पीआईडी है, और इसी दूसरे क्षेत्र (बच्चे पीआईडी) को प्रिंट करता है।
यदि आप ऐसी प्रक्रिया के तत्काल बच्चों को देखना चाहते हैं जिसका पीआईडी है 123तो आप psकमांड के --ppidविकल्प का उपयोग कर सकते हैं :
ps --ppid 123
आप pidofइस प्रक्रिया को नाम के साथ एक प्रक्रिया के बच्चों को नाम से जोड़ सकते हैंfoo
ps --ppid $(pidof foo)
एक अन्य विकल्प, सिस्टम मॉनिटर का उपयोग करना है (पहले से स्थापित है)। एसएम मेनुबार में "डिपेंडेंसी" विकल्प, "व्यू" के तहत, दृश्य प्रतिक्रिया के लिए, नीचे स्क्रीनशॉट में शो जैसे माता-पिता और बच्चों की प्रक्रिया (एस) दिखाते हैं।
मैं खुद सीएल (कमांड लाइन) को पसंद करता हूं और सुझाव देता हूं, कि जो लोग लिनक्स का उपयोग करते हैं, इस मामले में दैनिक आधार पर उबंटू, जीयूआई अनुप्रयोगों या कम से कम बुनियादी आदेशों को सीखने में अपना समय निवेश करते हैं, कम से कम दोनों में मास्टर करने में सक्षम हैं निश्चित डिग्री!

मैं एक विशेषज्ञ नहीं हूं, लेकिन उपरोक्त उत्तरों को पढ़ने से मुझे यह प्रतीत हुआ कि संभवतया यह एक और अधिक प्रत्यक्ष तरीका है, जो कि फ़ाइल सिस्टम के माध्यम से ऐसा करने के लिए है, उदाहरण के लिए मानव-पठनीय प्रदर्शन के बजाय स्क्रिप्ट में प्रोग्रामेटिक उपयोग के लिए। और वास्तव में वहाँ है: आईडी कोड $ mypid के साथ एक प्रक्रिया के लिए, इसकी बाल प्रक्रियाओं को सूचीबद्ध किया गया है
/proc/$mypid/task/$mypid/children
जैसे
$ cat /proc/3123/task/3123/children
3131 3133
इसी तरह, आप फ़ाइल में "PPid" प्रविष्टि के माध्यम से मूल प्रक्रिया आईडी प्राप्त कर सकते हैं
/proc/$mypid/task/$mypid/status
जैसे
$ grep PPid /proc/3131/task/3131/status
PPid: 3123
$ grep PPid /proc/3131/task/3131/status | cut -f2
3123
मुझे यकीन नहीं है कि यह लिनक्स सिस्टम से कितना पोर्टेबल है, हालांकि।
ps -o ppid= -o pid= -A | awk '$1 == <some pid>' | cut -f2POSIX-compliant होना चाहिए।