2010-06-08 09:42:29 +0000 2010-06-08 09:42:29 +0000
94
94

Come ottenere il PID padre di un dato processo in GNU/Linux da riga di comando?

Risolto prima della richiesta: cat /proc/1111/status | grep PPid

Risposte (10)

112
112
112
2010-06-08 11:21:06 +0000

Linea di comando:

ps -o ppid= -p 1111
``` ```
ppid () { ps -p ${1:-$$} -o ppid=; }

Funzione:

alias ppid='ps -o ppid= -p'

Alias (una funzione è preferibile ):

#!/bin/sh
pid=$1
if [-z $pid]
then
    read -p "PID: " pid
fi
ps -p ${pid:-$$} -o ppid=
``` &001 

Script: 



&001 

Script: 


&001 &001 

Se non viene fornito un PID alla funzione o allo script, essi mostrano per default il PPID del processo corrente. 


Per utilizzare l'alias, deve essere fornito un PID.
15
15
15
2013-01-31 20:32:13 +0000

Questa è una di quelle cose che imparo, dimentico, riapprendo, ripeto. Ma è utile. La bandiera “s” del comando pstree mostra un albero con una foglia a N:

pstree -sA $(pgrep badblocks)
systemd---sudo---mkfs.ext4---badblocks
13
13
13
2012-09-24 11:55:28 +0000

Il pid del genitore è nella variabile PPID, quindi

echo $PPID
12
12
12
2016-02-19 21:31:34 +0000

Per stampare gli ID padre (PPID) di tutti i processi, usare questo comando:

ps j

Per il singolo processo, basta passare il PID, come: ps j 1234.

Per estrarre solo il valore, filtrare l'uscita di awk, come:

ps j | awk 'NR>1 {print $3}' # BSD ps
ps j | awk 'NR>1 {print $1}' # GNU ps

Per elencare i PID padre di tutti i processi, usare pstree (installarlo se non ce l'avete):

$ pstree -sg 1234
systemd(1)───sshd(1036)───bash(2383)───pstree(3007)

Per ottenere il PID padre del processo corrente, usare echo $$.

6
6
6
2010-06-08 09:44:05 +0000

Leggere /proc/$PID/status. Può essere facilmente scriptato:

#!/bin/sh P=$1 if [-z "$P"]; then read P fi cat /proc/"$P"/status | grep PPid: | grep -o "[0-9]\*"
4
4
4
2014-10-21 17:30:05 +0000

Su Linux:

ps hoppid $thatprocess
2
2
2
2014-10-19 20:08:11 +0000
$ ps -p $(ps -p $(echo $$) -o ppid=) -o comm=
    tmux

Un esempio un po’ più complesso che controlla il comando di un genitore che ha avviato il processo corrente Cambia comm= a cmd= per vedere il comando completo

1
1
1
2012-11-23 12:21:12 +0000

Eseguire top con qualsiasi opzione si desideri, come -u username and -p PID.

E mentre top è in funzione premere f, mostra una lista di opzioni che si desidera visualizzare in uscita top, e i parametri visualizzati saranno mostrati in lettere maiuscole e i parametri visualizzati o meno saranno mostrati in lettere minuscole.

Quindi inserendo la lettera prima del parametro è possibile abilitarlo o disabilitarlo. Per l'ID del processo padre si deve inserire b e poi premere Enter, esso visualizzerà il PPID nell'uscita superiore.

1
1
1
2013-09-12 06:18:04 +0000

Ecco una soluzione rapida che dovrebbe funzionare anche:

ps $$
0
0
0
2019-10-30 21:51:11 +0000

tutti i processi genitoriali di un pid

Sono venuto qui quando cercavo di trovare “tutti i processi genitoriali di un pid”. Ho finito per creare la mia funzione ricorsiva per farlo.

pid_lineage.sh

#!/bin/bash -eu

main(){
  ps -p ${1:-$$} -h -o pid,ppid,args | \
    (
      read pid ppid args
      echo -e "$pid\t$args"
      [[$pid -gt 1]] && main $ppid
    )
}

main "$@"