Estoy usando bash en un sistema RH Linux.
Normalmente, puede obtener su propio PID con la variable $$. Sin embargo, si un script ejecuta una de sus propias funciones como un proceso en segundo plano, eso no funciona; todas las funciones que se ejecuten en segundo plano obtendrán el PID del script principal cuando se use $$.
Por ejemplo, aquí hay un script de prueba:
/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
Cuando se ejecuta:
/tmp$ ./test
I am 5253
Started: 5254
Started: 5256
Started: 5258
/tmp$ aa :: 5253
bb :: 5253
cc :: 5253
Entonces, el script principal (/tmp/test) se ejecuta como PID 5253 y activa tres procesos en segundo plano con PID 5254, 5256 y 5258. Pero cada uno de esos procesos en segundo plano obtiene el valor 5253 con $$.
¿Cómo pueden estos procesos descubrir su PID real?
Respuesta aceptada:
$BASHPID
puede ser lo que estás buscando.
BASHPID
Se expande al ID de proceso del proceso Bash actual. Esto difiere de $$ en ciertas circunstancias, como subcapas que
no requieren que Bash se reinicie.
A diferencia de $$
($$) Se expande al ID de proceso del shell. En un () subshell,
se expande al ID de proceso del shell que invoca, no al subshell.
http://www.gnu.org/software/bash/manual/bashref.html#Bash-Variables