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


90

Résolu avant de demander: cat /proc/1111/status | grep PPid


plus rapide: grep PPid status |cut -f2comme dans time(for((i=0;i<1000;i++));do grep PPid status |cut -f2 >/dev/null;done); me demande s'il y a quelque chose d'encore plus rapide?
Aquarius Power

1
@AquariusPower Puisque vous demandez, fgrep est plus rapide que grep. fgrep PPid status |cut -f2
jbo5112

sed est bien plus rapide que grep et coupe:sed -rn '/PPid/ s/^.*:\s+// p' < status
Marian

Réponses:


108

Ligne de commande:

ps -o ppid= -p 1111

Une fonction:

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

Alias ​​(une fonction est préférable ):

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

Scénario:

#!/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, le PPID du processus en cours est affiché par défaut.

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


Le =signe n'est pas nécessaire, du moins sous OS X 10.8.2.
Jtbandes

5
@jtbandes: le signe égal utilisé ici supprime la sortie de la ligne d'en-tête ( Linux et OS X ).
Dennis Williamson

13

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

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

12

Le pid parent est dans la variable shell PPID, donc

echo $PPID

1
Oui, mais 1. Je veux le pid parent d'un autre processus, 2. Je veux pouvoir traverser tous les ancêtres pour commencer.
Vi.

1
Par ailleurs, l’utilisation $PPIDn’a fait que résoudre le problème que Google avait suggéré à cette page de répondre.
Paul Whittaker le

12

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

ps j

Pour le processus simple, il suffit de passer le PID, comme: ps j 1234.

Pour extraire uniquement la valeur, filtrez la sortie awkcomme suit:

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


1
pstreeest le plus beau que j'ai vu ici.
sudo

ps jest génial car il est disponible sur de nombreuses distributions et est facilement composable
Connor McCormick

6

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

#! / bin / sh
P = 1 $
si [-z "$ P"]; ensuite
    lire P
Fi
cat / proc / "$ P" / status | grep PPid: | grep -o "[0-9] *"

2
grep '^PPid:' /proc/$1/status | grep -o '[0-9]*'c'est tout ce dont vous avez besoin. (Il est très rare que les outils Unix fassent la if [ -z ]; then readchose.)
grawity

@grawity Ça aide de faire des choses commeecho $$ | ppid | ppid | ppid
Vi.

2
UUOC utilisation inutile du chat
Felipe Alvarez

@ FelipeAlvarez, Mes mains ne sont pas habituées à taper < /some/file grep | grep | ....
Vi.

2
Qu'en est-ilgrep /some/file
Felipe Alvarez


2
$ ps -p $(ps -p $(echo $$) -o ppid=) -o comm=
    tmux

Exemple un peu plus complexe qui vérifie la commande d'un parent qui a démarré le processus en cours Modifiez comm = en cmd = pour afficher la commande complète.


Utilisation inutile d' écho ? ;)
bobbogo

C'est en fait requis sur certains terminaux. Pour être honnête, je ne me souviens pas exactement, mais cela a en fait résolu un problème. : D
sebastian_t


1

Exécuter topavec toutes les options que vous voulez, comme -u username and -p PID.

Et pendant que vous topappuyez sur f, vous obtenez une liste des options que vous souhaitez afficher en topsortie. Les paramètres affichés sont affichés en lettres majuscules et les paramètres affichés ou non en petites lettres.

Donc, en entrant la lettre avant le paramètre, vous pouvez l'activer ou le désactiver. Pour l'ID de processus parent, vous devez entrer bpuis appuyer sur Enter, le PPID s'affichera dans la sortie supérieure.


1
Il doit être utilisé de manière non interactive. Je sais déjà que dans htopvous pouvez configurer la PPIDcolonne.
Vi.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.