2012-10-12 10 views
6

il comando pstree PID può mostrare tutte le informazioni di subprocesso del processo specificato da PID. Tuttavia, voglio anche conoscere tutte le informazioni sul processo genitore del processo PID, come posso ottenerlo?come ottenere tutti i processi parent e tutti i sottoprocessi mediante `pstree`

Un esempio, do sotto processo:

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

Quello che voglio è quando corro pstree current_process_pid, voglio arrivare al di sotto di uscita

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

Quando eseguo pstree subprocess_1_pid, il risultato sarà

 
init 
`- parent_process 
    `- current_process 
     `- subprocess_1 

Grazie in anticipo

+0

Hai provato con 'ps -ef'? – gks

+0

Nota: l'uso dell'opzione -l dei comandi pstree/ps mostra le linee lunghe con gli argomenti della riga di comando del processo. Utile quando si desidera tracciare gli argomenti della riga di comando per ogni processo e vedere quale comando/script viene attivato (ad esempio, capire quali script di backend vengono eseguiti per un'operazione di interfaccia utente Web). Opzione – GuruM

risposta

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

Forse se con 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) } 
' 

Questo è brutto assumendo colonna di output di ps e di ordine. In realtà una sola esecuzione di ps -ef contiene tutte le informazioni necessarie. Questo non vale la pena, consiglio comunque di aggiornare psmisc, non farà male.

EDIT: Una mimica usando corsa singola 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' non supportata dal mio' pstree' installato da 'psmisc-22.2-7.el5_6.2' –

+2

Come mnemonico ricordo gli argomenti come' giri' come in 'pstree -laps ' per ottenere il filiale con informazioni aggiuntive. – haridsv

2

ho trovato laps opzioni di cui parla @haridsv (pstree -laps <pid>) essere una soluzione. Però è stato un po 'prolisso, quindi mi attenevo a un output aps più corto.

Problemi correlati