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
Risolto prima della richiesta: cat /proc/1111/status | grep PPid
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.
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
Il pid del genitore è nella variabile PPID, quindi
echo $PPID
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 $$
.
$ 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
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.
Ecco una soluzione rapida che dovrebbe funzionare anche:
ps $$
Sono venuto qui quando cercavo di trovare “tutti i processi genitoriali di un pid”. Ho finito per creare la mia funzione ricorsiva per farlo.
#!/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 "$@"