91 votes

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

Comment obtenir le PID du parent à partir du PID d'un enfant donné ?

Je sais que je peux le vérifier manuellement sous /proc Je me demande s'il n'y a pas un meilleur moyen d'y parvenir dans Ubuntu. Notez que le parent peut être tué ou non.

Merci

109voto

ish Points 134738

Comment obtenir un PID parent (PPID) à partir de l'ID de processus (PID) d'un enfant en utilisant 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 aussi utiliser le bon vieux ps | grep : ps -eo ppid,comm | grep '[f]oo' .

  • Une explication plus complète : ps -f 2072 renvoie à UID PID PPID C STIME TTY STAT TIME CMD izx 2072 2061 0 07:16 ? S 0:00 /usr/lib/pulseaudio/pulse/gconf-helper

  • Le site pstree la relation est : pstree -s -p 2072 : init(1)pulseaudio(2061)gconf-helper(2072)

30voto

Gilles Quenot Points 3005

En utilisant uniquement Shell pour obtenir le PID du 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, il s'agit du PID du processus parent
  • sur /proc/ vous avez des répertoires avec le PID de chaque processus. Ensuite, si vous cat /proc/$PPID/comm vous donnez le nom de la commande du PID.

Vérifiez procréation assistée

11voto

WinEunuuchs2Unix Points 91128

使用方法 pstree par nom de commande

使用方法 pstree vous pouvez effectuer une recherche par le nom du processus enfant et obtenir le Process ID (PID) ainsi que les parents, les grands-parents et les enfants du processus enfant :

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

Dans ce cas sleep est la commande enfant et son PID est le suivant 8414 . Son ID parent est 841 et il est appelé display-auto-brightness . Le grand-parent est un Shell ( sh ) avec un ID de processus de 839 . L'arrière-grand-parent est cron avec un ID de processus de 795 . L'arrière-arrière-grand-parent est également cron avec un ID de processus de 763 .

Si vous voulez rechercher par l'ID de processus de sleep au lieu du nom que vous pouvez utiliser :

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

Remarquez le sleep l'ID du processus a été changé en 14653 . Le parent (PID 841) dort pendant 1 minute, se réveille pendant une fraction de seconde et démarre un nouveau cycle de travail. sleep qui obtient un nouvel ID de processus. C'est une autre raison pour laquelle la recherche de sleep est plus facile que la recherche par ID de processus.

Ce code a été pris de : Ajuster automatiquement la luminosité de l'écran en fonction du lever et du coucher du soleil. et 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

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

5voto

Pallav Jha Points 171

ps -efj peut également être utilisé à cette fin.

Par exemple,

> ps -efj | head
UID        PID  PPID  PGID   SID  C STIME TTY          TIME CMD
root         1     0     1     1  0 Jul01 ?        00:00:13 /sbin/init splash
root         2     0     0     0  0 Jul01 ?        00:00:00 [kthreadd]
root         3     2     0     0  0 Jul01 ?        00:00:02 [ksoftirqd/0]
root         5     2     0     0  0 Jul01 ?        00:00:00 [kworker/0:0H]
root         7     2     0     0  0 Jul01 ?        00:06:44 [rcu_sched]
root         8     2     0     0  0 Jul01 ?        00:00:00 [rcu_bh]
root         9     2     0     0  0 Jul01 ?        00:00:00 [migration/0]
root        10     2     0     0  0 Jul01 ?        00:00:08 [watchdog/0]
root        11     2     0     0  0 Jul01 ?        00:00:08 [watchdog/1]

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