web-dev-qa-db-fra.com

Comment obtenir l'ID de processus parent d'un processus enfant donné?

Comment obtenir le pid parent d'un pid donné?

Je sais que je peux vérifier manuellement sous/proc, je me demande s’il existe un moyen intelligent/meilleur d’atteindre cet objectif dans Ubuntu. Notez que le parent peut ou peut ne pas être tué.

Merci

45
cache

Comment obtenir un PID parent (PPID) à partir de l'ID de processus d'un enfant (PID) à l'aide de la ligne de commande

Utilisez ps -o ppid=

  • par exemple. ps -o ppid= 2072 renvoie 2061, que vous pouvez facilement utiliser dans un script, etc. ps -o ppid= -C foo donne le PPID du processus avec la commande foo. Vous pouvez également utiliser l'ancien code ps | grep: ps -eo ppid,comm | grep '[f]oo'.
  • Explication plus complète: ps -f 2072 renvoie
     UID PID PPID  C STIME TTY STAT HEURE CMD 
     Izx 2072 2061  0 07h16? S 0:00 /usr/lib/pulseaudio/Pulse/gconf-helper
    
  • La relation pstree est: pstree -s -p 2072:
     init (1) ulspulseaudio (2061) ───gconf-helper (2072) 
    
53
ish

Utiliser uniquement la variable Shell pour obtenir le PID parent:

echo $PPID

si vous avez besoin de la commande de ce pid parent:

cat /proc/$PPID/comm

si vous avez besoin de la ligne de commande complète (avec toutes les options):

cat /proc/$PPID/cmdline

Explication

  • $PPID est défini par le shell, c'est le PID du processus parent
  • dans /proc/, vous avez quelques répertoires avec le PID de chaque processus. Ensuite, si vous cat /proc/$PPID/comm, vous indiquez le nom de la commande du PID

Vérifier man proc

5
Gilles Quenot

Utilisation de pstreepar nom de commande

En utilisant pstreename__, vous pouvez effectuer une recherche par nom de processus enfant et obtenir l'ID de processus (PID) avec les parents, les grands-parents et tous les enfants du processus enfant:

$ pstree -hp | grep sleep
           |-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(8414)

Dans ce cas, sleepest la commande enfant et son PID est 8414. Son ID parent est 841 et s'appelle display-auto-brightness. Le grand-parent est un shell (shname__) avec un ID de processus de 839. L'arrière-grand-parent est cronavec un ID de processus de 795. L'arrière-arrière-grand-parent est également cronavec un ID de processus de 763.

Si vous souhaitez rechercher par l'ID de processus sleepà la place de name, vous pouvez utiliser:

$ pstree -hp | grep 14653
           |-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(14653)

Notez que l'ID de processus sleepa été remplacé par 14653. Le parent (PID 841) dort pendant 1 minute, se réveille pendant une fraction de seconde, puis lance une nouvelle commande sleepqui obtient un nouvel ID de processus. Ceci est une autre raison pour laquelle la recherche de sleepest plus facile que la recherche par ID de processus.

Ce code provient de: Ajuste automatiquement la luminosité de l'écran en fonction du lever et du coucher du soleil et est adapté à cette question.


Pour voir une chaîne imbriquée jusqu'au processus de démarrage, utilisez le PID au lieu du nom:

$ pstree -aps 8541
systemd,1 splash fastboot kaslr
  └─cron,763 -f
      └─cron,795 -f
          └─sh,839 -c    /usr/local/bin/display-auto-brightness
              └─display-auto-br,841 /usr/local/bin/display-auto-brightness
                  └─sleep,8541 60

Remarque: Une autre minute s'est écoulée et la commande de veille obtient un nouveau PID (8541).

1
WinEunuuchs2Unix