2012-10-12 11 views
6

कमांड pstree PIDPID द्वारा निर्दिष्ट प्रक्रिया की सभी सबप्रोसेस जानकारी दिखा सकता है। हालांकि, मैं PID प्रक्रिया की सभी मूल प्रक्रिया की जानकारी भी जानना चाहता हूं, मैं इसे कैसे प्राप्त कर सकता हूं?सभी मूल प्रक्रियाओं और सभी उपप्रोसेसेस को 'pstree`

एक उदाहरण है, प्रक्रिया नीचे दे:

 
init 
|- parent_process 
| `- current_process 
|  |- subprocess_1 
|  `- subprocess_2 
`- other_process 

क्या मैं चाहता हूँ जब मैं pstree current_process_pid चलाने के लिए, मैं उत्पादन

 
init 
`- parent_process 
    `- current_process 
     |- subprocess_1 
     `- subprocess_2 

जब मैं pstree subprocess_1_pid चलाने नीचे प्राप्त करना चाहते हैं, यह उत्पादन

 
init 
`- parent_process 
    `- current_process 
     `- subprocess_1 

अग्रिम धन्यवाद

+0

क्या आपने 'ps -ef' के साथ प्रयास किया था? – gks

+0

नोट: pstree/ps कमांड का -l विकल्प का उपयोग प्रक्रिया के कमांड लाइन तर्क के साथ लंबी लाइनें दिखाता है। सहायक जब आप प्रत्येक प्रक्रिया के लिए कमांड लाइन तर्कों का पता लगाना चाहते हैं और देखें कि कौन सी कमांड/स्क्रिप्ट ट्रिगर हो जाती है (उदाहरण के लिए पता लगाएं कि कौन सी बैकएंड स्क्रिप्ट वेब यूआई ऑपरेशन के लिए चलती हैं)। – GuruM

उत्तर

9
# With my psmisc 22.20: 
pstree -p -s PID 

शायद ps -ef साथ करता है, तो:

awk -vPID=$1 ' 
function getParent (pid) { 
    if (pid == "" || pid == "0") return; 
    while ("ps -ef | grep "pid | getline) { 
     if ($2 == pid) { 
      print $8"("$2") Called By "$3; 
      getParent($3); 
      break; 
     } 
    } 
    close ("ps -ef") 
} 

BEGIN { getParent(PID) } 
' 

यह बदसूरत संभालने ps उत्पादन स्तंभ और आदेश है। असल में पीएस-एफ के एक भी रन में सभी जानकारी की आवश्यकता होती है। यह समय के लायक नहीं है, मैं अभी भी psmisc अद्यतन करने की सलाह देते हैं, यह चोट नहीं पहुंचाएगा।

संपादित करें: एक नकल का उपयोग कर एक रन ps -ef:

ps -ef | awk -vPID=$1 ' 
function getpp (pid, pcmd, proc) { 
    for (p in pcmd) { 
     if (p == pid) { 
      getpp(proc[p], pcmd, proc); 
      if (pid != PID) printf("%s(%s)───", pcmd[pid], pid); 
     } 
    } 
} 

NR > 1 { 
    # pid=>cmd 
    pcmd[$2] = $8; 
    # pid=>Parent 
    pproc[$2] = $3; 
} 

END { 
    getpp(PID, pcmd, pproc); 
    printf "\n"; 
    system("pstree -p "PID); 
}' 
+3

'-s' विकल्प मेरे 'pstree' द्वारा समर्थित नहीं है जो' psmisc-22.2-7.el5_6.2' –

+2

द्वारा स्थापित किया गया है, मुझे याद है कि 'pstree -laps ' के रूप में तर्क 'laps' के रूप में' अतिरिक्त जानकारी के साथ शाखा। – haridsv

2

मैं laps विकल्पों @haridsv (pstree -laps <pid>) ने उल्लेख किया जा रहा है एक समाधान मिल गया। हालांकि यह मेरे लिए थोड़ा सा वर्बोज था, इसलिए मैं एक छोटे से aps आउटपुट तक चिपके रहूंगा।

संबंधित मुद्दे