Pagkat-on sa Kalainan Tali sa $$ug $BASHPID sa Bash


Bag-ohay lang nagtrabaho ko sa usa ka script sa shell ug nakita nako ang usa ka hinungdanon nga kalainan kung giunsa ang paggawi sa espesyal nga variable $ ug BASHPID. Ang matag proseso nga nagdagan sa Linux i-assign sa usa ka ID sa proseso ug mao kana kung giunsa pagdumala sa operating system ang proseso.

Sa susama, ang imong bash terminal session ma-assign usab sa usa ka process ID. Adunay espesyal nga variable nga gitawag og \$\ ug \$BASHPID\ nga nagtipig sa process ID sa kasamtangang kabhang.

Padayon ug padagana ang ubos nga sugo aron makita kung unsa ang proseso ID sa imong kasamtangan nga kabhang. Parehong \$\ ug \$BASHPID\ magbalik sa parehas nga kantidad.

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

Sa bash kung tawagan namon ang bisan unsang external nga programa gikan sa shell, maghimo kini usa ka proseso sa bata/subshell ug ang programa isumite sa proseso sa bata lamang. Tan-awa sa ubos nga pananglitan diin akong gibutang ang usa ka yano nga proseso sa pagmonitor nga sugo sa usa ka script nga gitawag og sample.sh aron ipakita kung giunsa ang parent shell nagmugna og usa ka subshell aron sa pagpadagan sa programa.

#!/usr/bin/env bash

ps -ef --forest | grep -i bash

Karon sa pagpadagan niini nga script makuha nato ang proseso ID sa bash. Gikan sa ubos nga hulagway, imong masabtan sa dihang gitawag nako ang script bash nagmugna og proseso sa bata ug nagpadagan sa script.

$ ./sample.sh

Karon atong gamiton ang duha \$\ ug \$BASHPID\ sulod sa script ug tan-awon kung unsa ang ibalik niini.

#!/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

Karon pagdagan ang script pag-usab.

$ ./sample.sh

Sige, nagbalik kini sa parehas nga ID sa proseso. Dinhi moabut ang aktuwal nga kalainan. Maghimo kita og laing proseso sa bata sulod sa script pinaagi sa pagpadagan og command sulod sa parentheses().

# 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"

Sa bash, ang Parentheses mag-invoke sa proseso sa bata ug magpadagan sa bisan unsa nga naa sa sulod sa parentheses. Niana nga kaso, ang $ ug $BASHPID kinahanglang magtipig ug bag-ong child process ID. Apan gikan sa hulagway sa ibabaw, imong makita nga adunay kalainan diin ang $ nagtipig 382 nga mao ang parent ID (Process ID sa script sample.sh), ug $BASHPID nagtipig sa gibuhat nga child process ID nga gihimo sa parentheses.

Karon atong sulayan nga masabtan kini nga kinaiya. Atong tan-awon kung unsa ang giingon sa panid sa tawo.

$ man bash

Kung imong gigamit ang $, bisan sa usa ka subshell, gitipigan niini ang ID sa proseso sa proseso sa ginikanan nga gigikanan niini. Apan ang BASHPID magtipig sa kasamtangan nga ID sa proseso, i.e kung gitawag sa sulod sa parentheses kini magtipig sa ID sa proseso sa bata.

Dili namo ma-assign o usbon ang variable $, pero ang BASHPID mahimong i-assign pag-usab apan wala kini epekto.

$ $=10
$ BASHPID=10
$ echo $BASHPID

Posible nga i-unset ang BASHPID. Kung imong gi-unset kini mawad-an sa espesyal nga kahimtang niini ug mahimo ka usab magsugod sa paggamit niini ingon usa ka normal nga variable.

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

Bisan kung imong sulayan ang pag-assign sa proseso ID sa kabhang kini isipon nga usa ka variable nga gitakda sa gumagamit tungod kay nawala na ang espesyal nga kahimtang niini.

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

Sa kini nga kaso, kinahanglan nimo nga mogamit usa ka bag-ong sesyon sa terminal para sa BASHPID aron makuha ang espesyal nga kahimtang niini.

Mao kana alang niini nga artikulo. Nakita namon ang kalainan tali sa $ ug BASHPID ug kung giunsa nila paggawi sa kini nga artikulo. Lakaw pinaagi niini nga artikulo ug ipaambit ang imong bililhong feedback kanamo.