Ich verwende Bash auf einem RH-Linux-System.
Normalerweise können Sie Ihre eigene PID mit der Variable $$ erhalten. Wenn jedoch ein Skript eine seiner eigenen Funktionen als Hintergrundprozess ausführt, funktioniert das nicht; Alle im Hintergrund ausgeführten Funktionen erhalten die PID des übergeordneten Skripts, wenn $$ verwendet wird.
Hier ist zum Beispiel ein Testskript:
/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
Wenn es ausgeführt wird:
/tmp$ ./test
I am 5253
Started: 5254
Started: 5256
Started: 5258
/tmp$ aa :: 5253
bb :: 5253
cc :: 5253
Also – das übergeordnete Skript (/tmp/test) wird als PID 5253 ausgeführt und löst drei Hintergrundprozesse mit den PIDs 5254, 5256 und 5258 aus. Aber jeder dieser Hintergrundprozesse erhält den Wert 5253 mit $$.
Wie können diese Prozesse ihre tatsächliche PID ermitteln?
Akzeptierte Antwort:
$BASHPID
könnte das sein, wonach Sie suchen.
BASHPID
Erweitert auf die Prozess-ID des aktuellen Bash-Prozesses. Dies unterscheidet sich unter bestimmten Umständen von $$, z. B. Subshells, die
keine Neuinitialisierung von Bash erfordern.
Im Gegensatz zu $$
($$) Erweitert auf die Prozess-ID der Shell. In einer ()-Subshell wird es
zur Prozess-ID der aufrufenden Shell erweitert, nicht zur Subshell.
http://www.gnu.org/software/bash/manual/bashref.html#Bash-Variablen