Používám bash na systému RH Linux.
Normálně můžete získat vlastní PID s proměnnou $$. Pokud však skript spouští jednu ze svých vlastních funkcí jako proces na pozadí – nefunguje to; všechny funkce spuštěné na pozadí získají PID nadřazeného skriptu při použití $$.
Zde je například testovací skript:
/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
Po provedení:
/tmp$ ./test
I am 5253
Started: 5254
Started: 5256
Started: 5258
/tmp$ aa :: 5253
bb :: 5253
cc :: 5253
Takže – rodičovský skript (/tmp/test) se spustí jako PID 5253 a spustí tři procesy na pozadí s PID 5254, 5256 a 5258. Ale každý z těchto procesů na pozadí získá hodnotu 5253 s $$.
Jak mohou tyto procesy zjistit jeho skutečné PID?
Přijatá odpověď:
$BASHPID
může být to, co hledáte.
BASHPID
Rozbalí se na ID procesu aktuálního procesu Bash. To se za určitých okolností liší od $$, jako jsou subshelly, které
nevyžadují reinicializaci Bash.
Na rozdíl od $$
($$) Rozbalí se na ID procesu shellu. V podskořápce () se
rozšíří na ID procesu vyvolávajícího shellu, nikoli podskořápku.
http://www.gnu.org/software/bash/manual/bashref.html#Bash-Variables