Website-Suche

Erfahren Sie den Unterschied zwischen $$und $BASHPID in Bash


Kürzlich habe ich an einem Shell-Skript gearbeitet und einen signifikanten Unterschied darin gesehen, wie sich die spezielle Bash-Variable $ und BASHPID verhalten. Jedem Prozess, der unter Linux ausgeführt wird, wird eine Prozess-ID zugewiesen, und so handhabt das Betriebssystem den Prozess.

In ähnlicher Weise wird Ihrer Bash-Terminalsitzung auch eine Prozess-ID zugewiesen. Es gibt eine spezielle Variable namens "$" und "$BASHPID", die die Prozess-ID der aktuellen Shell speichert.

Fahren Sie fort und führen Sie den folgenden Befehl aus, um zu sehen, wie die Prozess-ID Ihrer aktuellen Shell lautet. Sowohl "$" als auch "$BASHPID" geben den gleichen Wert zurück.

$ echo $$               # Printing special variable $
echo $BASHPID         # Printing the varibale $BASHPID

Wenn wir in der Bash ein externes Programm aus der Shell aufrufen, wird ein untergeordneter Prozess/eine untergeordnete Shell erstellt, und das Programm wird nur im untergeordneten Prozess übergeben. Im folgenden Beispiel habe ich einen einfachen Prozessmonitor-Befehl in ein Skript namens "sample.sh" eingefügt, um zu demonstrieren, wie die übergeordnete Shell eine Subshell erstellt, um das Programm auszuführen.

#!/usr/bin/env bash

ps -ef --forest | grep -i bash

Beim Ausführen dieses Skripts können wir nun die Prozess-ID von bash abrufen. Anhand des folgenden Bildes können Sie verstehen, wann ich das Skript bash aufgerufen habe, um einen untergeordneten Prozess zu erstellen und das Skript auszuführen.

$ ./sample.sh

Lassen Sie uns nun sowohl "$" als auch "$BASHPID" innerhalb des Skripts verwenden und sehen, was es zurückgibt.

#!/usr/bin/env bash
echo "============================"
ps -ef --forest | grep -i bash
echo "============================"
echo "PID USING $ FOR SCRIPT $0 ==> $$"
echo "PID USING BASHPID FOR SCRIPT $0 ==> $BASHPID"
echo

Führen Sie nun das Skript erneut aus.

$ ./sample.sh

In Ordnung, es gibt die gleiche Prozess-ID zurück. Hier kommt der eigentliche Unterschied. Lassen Sie uns einen weiteren untergeordneten Prozess innerhalb des Skripts erstellen, indem wir einen Befehl in parentheses() ausführen.

# STORING THE PID INTO A VARIABLE…

VAR_HASH=$(echo $$)
VAR_BASHPID=$(echo $BASHPID)

echo "VALUE OF VAR_HASH ==> $VAR_HASH"
echo "VALUE OF VAR_BASHPID ==> $VAR_BASHPID"

In der Bash rufen Klammern einen untergeordneten Prozess auf und führen alles aus, was in den Klammern steht. In diesem Fall sollten sowohl $ als auch $BASHPID eine neue untergeordnete Prozess-ID speichern. Aus dem obigen Bild können Sie jedoch sehen, dass es einen Unterschied gibt, bei dem $ 382 speichert, die die übergeordnete ID (Prozess-ID des Skripts sample.sh), und $BASHPID die erstellte untergeordnete Prozess-ID speichert, die durch Klammern erstellt wurde.

Versuchen wir nun, dieses Verhalten zu verstehen. Wir werden sehen, was die Manpage sagt.

$ man bash

Wenn Sie $ verwenden, wird auch in einer Subshell die Prozess-ID des übergeordneten Prozesses gespeichert, aus dem es erstellt wurde. BASHPID speichert jedoch die aktuelle Prozess-ID, d.h. wenn es in Klammern aufgerufen wird, speichert es die ID des untergeordneten Prozesses.

Wir können die Variable $ nicht zuweisen oder ändern, aber BASHPID kann neu zugewiesen werden, aber es hat keine Auswirkungen.

$ $=10
BASHPID=10
echo $BASHPID

Es ist möglich, BASHPID zu deaktivieren. Wenn Sie das Set aufheben, verliert es seinen speziellen Zustand und Sie können es auch als normale Variable verwenden.

$ unset BASHPID
echo $BASHPID
BASHPID="Tecmint"
echo $BASHPID

Selbst wenn Sie versuchen, die Prozess-ID der Shell zuzuweisen, wird sie als benutzerdefinierte Variable behandelt, da sie bereits ihren speziellen Zustand verloren hat.

$ BASHPID=$(echo $$)
echo $$;echo $BASHPID

In diesem Fall müssen Sie eine neue Terminalsitzung für BASHPID verwenden, um den speziellen Zustand zu erhalten.

Das war's für diesen Artikel. Wir haben den Unterschied zwischen $ und BASHPID und wie sie sich verhalten, in diesem Artikel gesehen. Lesen Sie diesen Artikel und teilen Sie uns Ihr wertvolles Feedback mit.

Verwandte Artikel: