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