Question Comment obtenir le PID parent d'un processus donné dans GNU / Linux en ligne de commande?


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


75
2018-06-08 09:42


origine


plus rapide: grep PPid status |cut -f2 comme dans time(for((i=0;i<1000;i++));do grep PPid status |cut -f2 >/dev/null;done); se demander s'il y a quelque chose encore plus rapide? - Aquarius Power
@AquariusPower Comme vous le 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:


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'

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, ils affichent par défaut le PPID du processus en cours.

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


86
2018-06-08 11:21



le = le signe n'est pas nécessaire, au moins sous OS X 10.8.2. - jtbandes
@jtbandes: le signe égal utilisé ici supprime la sortie de la ligne d'en-tête (Linux et OS X). - Dennis Williamson
Aha, c'est comme ça! Merci! - jtbandes


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

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

11
2018-01-31 20:32





Le pid parent est dans la variable shell PPID, donc

echo $PPID

11
2017-09-24 11:55



Oui, mais 1. Je veux un parent pid d'un autre processus, 2. Je veux pouvoir parcourir tous les ancêtres pour init. - Vi.
D'autre part, en utilisant $PPID Je viens juste de résoudre le problème que Google a proposé à cette page. - Paul Whittaker


Cette commande:

ps j

imprimera les identifiants parents (PPID) de tous les processus.

Pour le processus unique, transmettez simplement le PID, comme: ps j 1234.

Pour extraire uniquement la valeur, filtrez la sortie par awk, comme:

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

Pour répertorier les PID de tous les parents, utilisez pstree, comme:

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

Pour obtenir le PID parent du processus en cours, utilisez echo $$.


6
2018-02-19 21:31



pstree est le plus beau que j'ai vu ici. - sudo


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

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

4
2018-06-08 09:44



grep '^PPid:' /proc/$1/status | grep -o '[0-9]*' est tout ce dont vous avez besoin (C'est très rare pour les outils Unix faire le if [ -z ]; then read chose.) - grawity
@grawity Il aide à faire des choses comme echo $$ | ppid | ppid | ppid - Vi.
UUOC utilisation inutile de chat - Felipe Alvarez
@FelipeAlvarez, Mes mains ne sont pas utilisées pour taper < /some/file grep | grep | .... - Vi.
Qu'en est-il de grep /some/file - Felipe Alvarez


Sous Linux:

ps hoppid $thatprocess

3
2017-10-21 17:30





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

Un exemple un peu plus complexe qui vérifie la commande d'un parent qui a démarré le processus en cours Changer la comm = à cmd = pour voir la commande complète


2
2017-10-19 20:08



Utilisation inutile de écho? ;) - bobbogo
Il est en fait nécessaire sur certains terminaux. Pour être honnête, je ne me souviens pas exactement, mais cela a résolu un problème. :RÉ - sebastian_t


Voici une solution rapide qui devrait également fonctionner:

ps $$

1
2017-09-12 06:18



Cela ne donne pas le PID parent qui est ce que le PO a demandé. - Dennis Williamson