it-swarm.com.de

Wie kennt ein Linux/Unix-Bash-Skript seine eigene PID?

Ich habe in Bash ein Skript namens Script.sh, und es muss seine eigene PID kennen (d. H. 

Irgendeine Idee, wie das geht?

117
Debugger

Die Variable '$$' enthält die PID.

191
Paul Tomblin

verwenden Sie $BASHPID oder $$

Weitere Informationen, einschließlich der Unterschiede zwischen den beiden, finden Sie im manual .

TL; DRTFM

  • $$ erweitert sich auf die Prozess-ID der Shell .
    • In einer ()-Subshell wird sie zur Prozess-ID der aufrufenden Shell erweitert, nicht zur Subshell. 
  • $BASHPID Wird auf die Prozess-ID des aktuellen Bash-Prozesses erweitert .
    • In einer ()-Subshell wird sie zur Prozess-ID der Subshell erweitert 
45
tvanfosson

Zusätzlich zu dem Beispiel im Advanced Bash Scripting Guide , auf das von Jefromi verwiesen wird, 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
32

Die PID wird in $$ gespeichert.

Beispiel: kill -9 $$ beendet die Shell-Instanz, von der aus es aufgerufen wird.

6
neo

Sie können die Variable $$ verwenden.

Wenn der Prozess ein untergeordneter Prozess ist und $ BASHPID nicht festgelegt ist, ist es möglich, die PPID eines erstellten untergeordneten Prozesses des laufenden Prozesses abzufragen. Es könnte etwas hässlich sein, aber es funktioniert. Beispiel:

sleep 1 &
mypid=$(ps -o ppid= -p "$!")
0
Joakim J. Rapp