Léiert den Ënnerscheed tëscht $$an $BASHPID zu Bash
Viru kuerzem hunn ech un engem Shell-Skript geschafft an ech hunn e wesentlechen Ënnerscheed gesinn wéi Bash speziell Variabel $
an BASHPID
sech behält. All Prozess, deen a Linux leeft, gëtt mat enger Prozess-ID zougewisen an dat ass wéi de Betribssystem de Prozess behandelt.
Ähnlech gëtt Är Bash Terminal Sessioun och mat enger Prozess ID zougewisen. Et gëtt eng speziell Variabel genannt \$\
an \$BASHPID\
déi d'Prozess-ID vun der aktueller Shell späichert.
Gitt vir a lafen de Kommando ënnen fir ze kucken wat d'Prozess ID vun Ärer aktueller Shell ass. Béid \$\
an \$BASHPID\
ginn dee selwechte Wäert zréck.
$ echo $$ # Printing special variable $ $ echo $BASHPID # Printing the varibale $BASHPID
Am Bash wa mir all externe Programm vun der Shell nennen, erstellt et e Kandprozess/Subshell an de Programm gëtt nëmmen am Kandprozess presentéiert. Kuckt hei ënnendrënner Beispill wou ech en einfache Prozessmonitor Kommando an engem Skript mam Numm sample.sh setzen fir ze demonstréieren wéi d'Eltereschuel eng Ënnershell erstellt fir de Programm ze lafen.
#!/usr/bin/env bash ps -ef --forest | grep -i bash
Elo beim Laafen vun dësem Skript kënne mir de Prozess ID vu bash kréien. Aus dem Bild hei drënner kënnt Dir verstoen wann ech de Skript bash genannt hunn e Kandprozess erstellt an de Skript lafen.
$ ./sample.sh
Loosst eis elo souwuel \$\
an \$BASHPID\
am Skript benotzen a kucken wat et zréckkënnt.
#!/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
Elo lafen de Skript erëm.
$ ./sample.sh
Gutt, et gëtt déiselwecht Prozess ID zréck. Hei kënnt den eigentlechen Ënnerscheed. Loosst eis en anere Kannerprozess am Skript erstellen andeems Dir e Kommando bannent Klammern()
leeft.
# 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"
Am Bash, Klammeren ruffen e Kannerprozess op a lafen alles wat an de Klammern kënnt. An deem Fall solle souwuel $
wéi och $BASHPID
eng nei Kandprozess-ID späicheren. Awer aus dem uewe Bild kënnt Dir gesinn datt et en Ënnerscheed ass wou $
382 späichert wat d'Elteren ID ass (Prozess ID vum Skript sample.sh), an $BASHPID
späichert déi erstallt Kand Prozess ID erstallt duerch parentheses.
Loosst eis elo probéieren dëst Verhalen ze verstoen. Mir wäerte gesinn wat d'Man Säit seet.
$ man bash
Wann Dir $
benotzt, och an enger Subshell, späichert et d'Prozess-ID vum Elterendeel, aus deem et erstallt gouf. Awer BASHPID
späichert déi aktuell Prozess ID, dh wann se an Klammeren opgeruff gëtt, späichert se d'Kandprozess ID.
Mir kënnen d'Variabel $
net zouginn oder änneren, awer BASHPID
kann nei zougewisen ginn, awer et huet keen Effekt.
$ $=10 $ BASHPID=10 $ echo $BASHPID
Et ass méiglech BASHPID auszeschalten. Wann Dir unset, verléiert et säi speziellen Zoustand an Dir kënnt och ufänken dëst als normal Variabel ze benotzen.
$ unset BASHPID $ echo $BASHPID $ BASHPID="Tecmint" $ echo $BASHPID
Och wann Dir probéiert d'Prozess ID vun der Shell ze ginn, gëtt se als Benotzerdefinéiert Variabel behandelt well se scho säi speziellen Zoustand verluer huet.
$ BASHPID=$(echo $$) $ echo $$;echo $BASHPID
An dësem Fall musst Dir eng nei Terminal Sessioun fir BASHPID benotzen fir säi spezielle Staat ze kréien.
Dat ass et fir dësen Artikel. Mir hunn den Ënnerscheed tëscht $
an BASHPID
gesinn a wéi se sech an dësem Artikel behuelen. Gitt duerch dësen Artikel an deelt Äre wäertvolle Feedback mat eis.