2012-10-12 6 views
6

Befehl pstree PID kann alle Subprozessinformationen des von PID angegebenen Prozesses anzeigen. Ich möchte jedoch auch alle Informationen über den Elternprozess des Prozesses PID wissen, wie kann ich es bekommen?wie alle übergeordneten Prozesse und alle Subprozesse von `pstree` abgerufen werden

Ein Beispiel, wie unten beschrieben vor geben:

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

Was ich will, ist, wenn ich pstree current_process_pid laufen, ich unten Ausgang

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

Wenn ich laufen pstree subprocess_1_pid, bekommen es ausgibt

 
init 
`- parent_process 
    `- current_process 
     `- subprocess_1 

Vielen Dank im Voraus

+0

Haben Sie versucht mit 'ps -ef'? – gks

+0

Hinweis: Wenn die Option -l der Befehle pstree/ps verwendet wird, werden lange Zeilen mit Befehlszeilenargumenten des Prozesses angezeigt. Hilfreich, wenn Sie Befehlszeilenargumente für jeden Prozess verfolgen und sehen möchten, welcher Befehl/welches Skript ausgelöst wird (z. B. herausfinden, welche Backend-Skripte für eine Web-UI-Operation ausgeführt werden). – GuruM

Antwort

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

Vielleicht, wenn mit 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) } 
' 

Dies ist hässlich ps Ausgabespalte und Ordnung übernehmen. Tatsächlich enthält ein einziger Durchlauf von ps -ef alle benötigten Informationen. Das ist die Zeit nicht wert, ich empfehle immer update psmisc, es wird nicht weh tun.

EDIT: Ein mimischen mit Lauf 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' Option wird nicht von meinem' pstree' unterstützt, der von 'psmisc-22.2-7.el5_6.2' installiert wurde –

+2

Als eine mnemonic erinnere ich mich an die Argumente als' laps' wie in 'pstree -laps ', um die zu bekommen Zweig mit zusätzlichen Informationen. – haridsv

2

fand ich laps von @haridsv genannten Optionen (pstree -laps <pid>) eine Lösung. Es war ein bisschen ausführlich für mich, also würde ich bei einer kürzeren aps Ausgabe bleiben.

Verwandte Themen