Sto usando bash su un sistema RH Linux.
Normalmente, puoi ottenere il tuo PID con la variabile $$. Tuttavia, se uno script esegue una delle sue funzioni come processo in background, non funziona; tutte le funzioni eseguite in background riceveranno il PID dello script padre quando viene utilizzato $$.
Ad esempio, ecco uno script di prova:
/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
Quando viene eseguito:
/tmp$ ./test
I am 5253
Started: 5254
Started: 5256
Started: 5258
/tmp$ aa :: 5253
bb :: 5253
cc :: 5253
Quindi, lo script padre (/tmp/test) viene eseguito come PID 5253 e attiva tre processi in background con i PID 5254, 5256 e 5258. Ma ciascuno di questi processi in background ottiene il valore 5253 con $$.
In che modo questi processi possono scoprire il suo PID effettivo?
Risposta accettata:
$BASHPID
potrebbe essere quello che stai cercando.
BASHPID
Si espande all'ID processo del processo Bash corrente. Questo è diverso da $$ in determinate circostanze, ad esempio subshell che
non richiedono la reinizializzazione di Bash.
Al contrario di $$
($$) Si espande all'ID di processo della shell. In una subshell (),
si espande all'ID processo della shell richiamante, non alla subshell.
http://www.gnu.org/software/bash/manual/bashref.html#Bash-Variables