Ich lese "BASH Pocket Guide von Oreilly". Es sagte:
Die Prozess-ID des aktuellen Bash-Prozesses. In einigen Fällen kann dies von $$ abweichen.
Oben Erklärung, erklärte $BASHPID
Variable.
Frage: Welche Fälle?
Ich lese "BASH Pocket Guide von Oreilly". Es sagte:
Die Prozess-ID des aktuellen Bash-Prozesses. In einigen Fällen kann dies von $$ abweichen.
Oben Erklärung, erklärte $BASHPID
Variable.
Frage: Welche Fälle?
Antworten:
Ein Beispiel finden Sie in der BASHPID
Beschreibung der Bash-Manpage:
BASHPID
Expands to the process id of the current bash process. This
differs from $$ under certain circumstances, such as subshells
that do not require bash to be re-initialized.
Hier ist ein Beispiel für eine Unterschale, die den Inhalt der Variablen zusammen mit $$
und den Inhalt BASHPID
außerhalb der Unterschale ausgibt.
$ echo $(echo $BASHPID $$) $$ $BASHPID
25680 16920 16920 16920
# | | | |
# | | | -- $BASHPID outside of the subshell
# | | -- $$ outside of the subshell
# | -- $$ inside of the subshell
# -- $BASHPID inside of the subshell
Unterschalen. $$
wird von POSIX angegeben und bleibt immer der Wert des ursprünglichen Shell-Prozesses. $BASHPID
ist eine Bash-spezifische Variable und ist immer der Wert des Prozesses, von dem die Variable dereferenziert wird, wobei Unterschalen gezählt werden.
$ f() { printf '%s: %d, %d\n' "$1" $$ $BASHPID; };
$ ${BASH_VERSION+shopt -s lastpipe}; set +m;
$ f 1 >&2 | f 2
2: 31490, 31490
1: 31490, 32545
Ich habe es geschafft, den mksh-Betreuer davon zu überzeugen BASHPID
, die neueste Version hinzuzufügen , so dass es etwas portabel ist. Es ist auch möglich, BASHPID
ksh93 selbst auf vielen Plattformen zu implementieren .
$BASHPID
BASH 4 neu ist. Wenn Sie BASH 3.x verwenden, müssen Sie$$