GNU/Linux >> Tutoriels Linux >  >> Linux

Comment un processus d'arrière-plan connaît-il son propre pid ?

J'utilise bash sur un système Linux RH.

Normalement, vous pouvez obtenir votre propre PID avec la variable $$. Cependant, si un script exécute l'une de ses propres fonctions en tant que processus d'arrière-plan, cela ne fonctionne pas ; toutes les fonctions exécutées en arrière-plan obtiendront le PID du script parent lorsque $$ est utilisé.

Par exemple, voici un script de test :

    /tmp/test:
    #!/bin/bash
    echo "I am $$"
    function proce {
      sleep 3
      echo "$1 :: $$"
    }

    for x in aa bb cc; do
      eval "proce $x &"
      echo "Started: $!"
    done

Lorsqu'il est exécuté :

    /tmp$ ./test
    I am 5253
    Started: 5254
    Started: 5256
    Started: 5258
    /tmp$ aa :: 5253
    bb :: 5253
    cc :: 5253

Ainsi, le script parent (/tmp/test) s'exécute en tant que PID 5253 et déclenche trois processus d'arrière-plan avec les PID 5254, 5256 et 5258. Mais chacun de ces processus d'arrière-plan obtient la valeur 5253 avec $$.

Comment ces processus peuvent-ils découvrir son PID réel ?

Réponse acceptée :

$BASHPID peut être ce que vous cherchez.

BASHPID

Développe l'ID de processus du processus Bash actuel. Cela diffère de $$ dans certaines circonstances, telles que les sous-shells qui
ne nécessitent pas la réinitialisation de Bash.

Contrairement à $$

($$) Développe l'ID de processus du shell. Dans un sous-shell (), il
s'étend à l'ID de processus du shell appelant, pas au sous-shell.

http://www.gnu.org/software/bash/manual/bashref.html#Bash-Variables


Linux
  1. Comment exécuter le processus Rsync en arrière-plan

  2. Comment puis-je tuer un processus par nom au lieu de PID?

  3. Comment obtenir l'ID de processus pour tuer un processus nohup ?

  4. Comment définir l'ID de processus sous Linux pour un programme spécifique

  5. Comment obtenir le PID par nom de processus ?

Comment trouver un nom de processus à l'aide d'un numéro PID sous Linux

Comment suspendre et mettre un processus d'arrière-plan au premier plan ?

Comment trouver le nom du processus à partir de son PID

Comment trouver le PID et le PPID d'un processus sous Linux

Comment envoyer des processus en arrière-plan sous Linux

Si je connais le numéro PID d'un processus, comment puis-je obtenir son nom ?