Comment obtenir le PID parent d'un processus donné dans GNU/Linux à partir de la ligne de commande ?
Résolu avant la question : cat /proc/1111/status | grep PPid
Résolu avant la question : cat /proc/1111/status | grep PPid
Ligne de commande :
ps -o ppid= -p 1111
Fonction :
ppid () { ps -p ${1:-$$} -o ppid=; }
Alias (une fonction est préférable ) :
alias ppid='ps -o ppid= -p'
Script :
#!/bin/sh
pid=$1
if [-z $pid]
then
read -p "PID: " pid
fi
ps -p ${pid:-$$} -o ppid=
Si aucun PID n'est fourni à la fonction ou au script, ils affichent par défaut le PPID du processus en cours.
Pour utiliser l'alias, un PID doit être fourni.
C'est une de ces choses que j'apprends, oublie, réapprend, répète. Mais c'est utile. Le drapeau ‘s’ de la commande pstree montre un arbre avec une feuille à N :
pstree -sA $(pgrep badblocks)
systemd---sudo---mkfs.ext4---badblocks
Le pid des parents est dans la variable shell PPID, donc
echo $PPID
Pour imprimer les identifiants parents (PPID
) de tous les processus, utilisez cette commande :
ps j
Pour le processus unique, passez simplement le PID, comme : ps j 1234
. Pour extraire uniquement la valeur, filtrez la sortie par awk
, comme :
ps j | awk 'NR>1 {print $3}' # BSD ps
ps j | awk 'NR>1 {print $1}' # GNU ps
Pour lister les PID de tous les parents, utilisez pstree
(installez le si vous ne l'avez pas) :
$ pstree -sg 1234
systemd(1)───sshd(1036)───bash(2383)───pstree(3007)
Pour obtenir le PID parent du processus en cours, utilisez echo $$
.
$ ps -p $(ps -p $(echo $$) -o ppid=) -o comm=
tmux
Un exemple un peu plus complexe qui vérifie la commande d'un parent ayant lancé le processus en cours Change comm= to cmd= to see full command
Exécutez top
avec les options que vous voulez, comme -u username and -p PID
.
Et pendant que top
fonctionne, appuyez sur f, il affiche une liste d'options que vous voulez afficher dans la sortie de top
, et les paramètres affichés seront affichés en lettres capitales et les paramètres qui s'affichent ou non seront affichés en lettres minuscules.
Ainsi, en entrant la lettre précédant le paramètre, vous pouvez l'activer ou le désactiver. Pour l'ID du processus parent, vous devez entrer b et ensuite appuyer sur Entrée, cela affichera le PPID en sortie supérieure.
Voici une solution rapide qui devrait également fonctionner :
ps $$
Je suis venu ici quand j'essayais de trouver “all parent processes of a pid”. J'ai fini par créer ma propre fonction récursive pour le faire.
#!/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 "$@"