Antworten:
Die Variable '$$' enthält die PID.
benutze $BASHPID
oder$$
Weitere Informationen, einschließlich der Unterschiede zwischen den beiden, finden Sie im Handbuch .
TL; DRTFM
$$
Erweitert sich auf die Prozess-ID der Shell.
()
Subshell wird die Prozess-ID der aufrufenden Shell und nicht die Subshell erweitert.$BASHPID
Wird auf die Prozess-ID des aktuellen Bash-Prozesses erweitert.
()
Subshell wird die Prozess-ID der Subshell erweitert$BASHPID
BASH 4 neu ist. Wenn Sie BASH 3.x verwenden, müssen Sie$$
Zusätzlich zu dem Beispiel im Advanced Bash Scripting Guide, auf das Jefromi verweist , zeigen diese Beispiele, wie Pipes Subshells erstellen:
$ echo $$ $BASHPID | cat -
11656 31528
$ echo $$ $BASHPID
11656 11656
$ echo $$ | while read line; do echo $line $$ $BASHPID; done
11656 11656 31497
$ while read line; do echo $line $$ $BASHPID; done <<< $$
11656 11656 11656
stdin
). Die Zeichenfolge wird als "Hier-Zeichenfolge" bezeichnet.
Die PID wird in gespeichert $$
.
Beispiel: kill -9 $$
Beendet die Shell-Instanz, von der aus sie aufgerufen wird.
kill -9
(mit -9
Flagge) gilt als schädlich und darf nur verwendet werden, wenn dies unbedingt erforderlich ist.
kill -9 $$
macht genau eine Sache. Es beendet den aktuellen Shell-Prozess . Dies ist nützlich, wenn Sie in der Shell-Sitzung etwas getan haben, an das Sie nicht schreiben möchten .bash_history
:docker run -e PASSWORD=hunter2 ircbot
Sie können die $$
Variable verwenden.
Wenn der Prozess ein untergeordneter Prozess ist und $ BASHPID nicht festgelegt ist, kann die ppid eines erstellten untergeordneten Prozesses des laufenden Prozesses abgefragt werden. Es mag ein bisschen hässlich sein, aber es funktioniert. Beispiel:
sleep 1 &
mypid=$(ps -o ppid= -p "$!")