117 votes

Comment obtenir le PID parent d'un processus donné sous GNU/Linux à partir de la ligne de commande ?

Résolu avant d'être demandé : cat /proc/1111/status | grep PPid

129voto

Damian Powell Points 315

Ligne de commande :

ps -o ppid= -p 1111

Fonction :

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

Alias (une fonction est de préférence ) :

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 actuel.

Pour utiliser l'alias, un PID doit être fourni.

19voto

kenorb Points 22006

Pour imprimer les identifiants des parents ( PPID ) de tous les processus, utilisez cette commande :

ps j

Pour le processus unique, il suffit de passer 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 PIDs 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 actuel, utilisez echo $$ .

15voto

Tory Kulick Points 186

C'est une de ces choses que j'apprends, oublie, réapprends, répète. Mais c'est utile. L'indicateur 's' de la commande pstree montre un arbre avec une feuille à N :

pstree -sA $(pgrep badblocks)
systemd---sudo---mkfs.ext4---badblocks

13voto

Ivan Novotny Points 139

Le pid parent se trouve dans la variable PPID de Shell, donc

echo $PPID

8voto

Vi. Points 15745

Lire /proc/$PID/status. Peut être facilement scriptée :

#!/bin/sh
P=$1
if \[ -z "$P" \]; then
    read P
fi
cat /proc/"$P"/status | grep PPid: | grep -o "\[0-9\]\*"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X