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

35

Comment obtenir le pid des parents d’un pid d’enfants donné?

Je sais que je peux le vérifier sous / proc, je me demande s'il existe un moyen intelligent / mieux d'y parvenir dans Ubuntu. Notez que le parent peut ou non être tué.

Merci

    
posée cache 21.06.2012 - 08:15
la source

3 réponses

43

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

Utilisez ps -o ppid=

  • p. ex. 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 ps | grep : ps -eo ppid,comm | grep '[f]oo' .
  • 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
    
  • La relation pstree est: pstree -s -p 2072 :
    init(1)───pulseaudio(2061)───gconf-helper(2072)
    
réponse donnée ish 21.06.2012 - 08:27
la source
2

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 des répertoires contenant le PID de chaque processus. Ensuite, si vous cat /proc/$PPID/comm , vous faites écho au nom de la commande du PID

Vérifiez man proc

    
réponse donnée Gilles Quenot 06.03.2018 - 01:20
la source
0

Utilisation de pstree par nom de commande

En utilisant pstree , vous pouvez effectuer une recherche par nom de processus enfant et obtenir l'identifiant de processus (PID) avec 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 8414 . L'identifiant parent est 841 et s'appelle 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 identifiant de processus de 763 .

Si vous souhaitez effectuer une recherche par ID de processus de sleep au lieu du nom, 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 sleep a été remplacé par 14653 . Le parent (PID 841) dort pendant 1 minute, se réveille une fraction de seconde, puis lance une nouvelle commande sleep qui obtient un nouvel identifiant 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 provient de: Ajuster automatiquement la luminosité de l'écran en fonction sur le lever et le 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

Remarque: une autre minute s'est écoulée et la commande sleep reçoit un nouveau PID (8541).

    
réponse donnée WinEunuuchs2Unix 06.03.2018 - 05:03
la source

Lire d'autres questions sur les étiquettes