பாஷில் $$மற்றும் AS BASHPID க்கு இடையிலான வேறுபாட்டைக் கற்றுக்கொள்ளுங்கள்


சமீபத்தில் நான் ஷெல் ஸ்கிரிப்ட்டில் பணிபுரிந்தேன், பாஷ் சிறப்பு மாறி $ மற்றும் BASHPID எவ்வாறு செயல்படுகின்றன என்பதில் குறிப்பிடத்தக்க வித்தியாசத்தைக் கண்டேன். லினக்ஸில் இயங்கும் ஒவ்வொரு செயல்முறையும் ஒரு செயல்முறை ஐடியுடன் ஒதுக்கப்படும், மேலும் இயக்க முறைமை இந்த செயல்முறையை கையாளுகிறது.

இதேபோல், உங்கள் பாஷ் முனைய அமர்வு ஒரு செயல்முறை ஐடியுடன் ஒதுக்கப்படும். \"$\" மற்றும் \"AS BASHPID \" எனப்படும் சிறப்பு மாறி உள்ளது, இது தற்போதைய ஷெல்லின் செயல்முறை ஐடியை சேமிக்கிறது.

உங்கள் தற்போதைய ஷெல்லின் செயல்முறை ஐடி என்ன என்பதைக் காண கீழேயுள்ள கட்டளையை இயக்கவும். \"$\" மற்றும் \"AS BASHPID \" இரண்டும் ஒரே மதிப்பைத் தரும்.

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

ஷெல்லில் இருந்து எந்தவொரு வெளிப்புற நிரலையும் நாங்கள் அழைக்கும்போது, அது ஒரு குழந்தை செயல்முறை/சப்ஷெல் உருவாக்கும் மற்றும் நிரல் குழந்தை செயல்பாட்டில் மட்டுமே சமர்ப்பிக்கப்படும். நிரலை இயக்குவதற்கு பெற்றோர் ஷெல் ஒரு துணைத்தொகுப்பை எவ்வாறு உருவாக்குகிறது என்பதை நிரூபிக்க “sample.sh” எனப்படும் ஸ்கிரிப்ட்டில் ஒரு எளிய செயல்முறை மானிட்டர் கட்டளையை நான் வைத்துள்ளேன்.

#!/usr/bin/env bash

ps -ef --forest | grep -i bash

இப்போது இந்த ஸ்கிரிப்டை இயக்கும் போது பாஷின் செயல்முறை ஐடியைப் பெறலாம். கீழேயுள்ள படத்திலிருந்து, ஸ்கிரிப்ட் பாஷ் ஒரு குழந்தை செயல்முறையை உருவாக்கி ஸ்கிரிப்டை இயக்கும்போது நான் புரிந்து கொள்ளலாம்.

$ ./sample.sh

இப்போது ஸ்கிரிப்டுக்குள் \"$\" மற்றும் \"AS BASHPID \" இரண்டையும் பயன்படுத்துவோம், அது என்ன தருகிறது என்பதைப் பார்ப்போம்.

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

இப்போது ஸ்கிரிப்டை மீண்டும் இயக்கவும்.

$ ./sample.sh

சரி, அது அதே செயல்முறை ஐடியை வழங்குகிறது. இங்கே உண்மையான வேறுபாடு வருகிறது. அடைப்புக்குறிக்குள்() க்குள் ஒரு கட்டளையை இயக்குவதன் மூலம் ஸ்கிரிப்டுக்குள் மற்றொரு குழந்தை செயல்முறையை உருவாக்குவோம்.

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

பாஷில், அடைப்புக்குறிப்புகள் ஒரு குழந்தை செயல்முறையைத் தூண்டும் மற்றும் அடைப்புக்குறிக்குள் வரும் அனைத்தையும் இயக்கும். அந்த வழக்கில், $ மற்றும் AS BASHPID இரண்டும் புதிய குழந்தை செயல்முறை ஐடியை சேமிக்க வேண்டும். ஆனால் மேலே உள்ள படத்திலிருந்து, $ 382 ஐ சேமிக்கும் ஒரு வித்தியாசம் இருப்பதை நீங்கள் காணலாம், இது பெற்றோர் ஐடி (ஸ்கிரிப்ட் sample.sh இன் செயல்முறை ஐடி), மற்றும் $BASHPID அடைப்புக்குறிப்புகளால் உருவாக்கப்பட்ட குழந்தை செயல்முறை ஐடியை சேமிக்கிறது.

இப்போது இந்த நடத்தை புரிந்து கொள்ள முயற்சிப்போம். மேன் பக்கம் என்ன சொல்கிறது என்று பார்ப்போம்.

$ man bash

நீங்கள் $ ஐப் பயன்படுத்தும்போது, ஒரு துணைத்தொகுப்பில் கூட, அது உருவாக்கிய பெற்றோர் செயல்முறையின் செயல்முறை ஐடியை சேமிக்கிறது. ஆனால் BASHPID தற்போதைய செயல்முறை ஐடியை சேமிக்கும், அதாவது அடைப்புக்குறிக்குள் அழைக்கப்படும் போது அது குழந்தை செயல்முறை ஐடியை சேமிக்கும்.

$ என்ற மாறியை எங்களால் ஒதுக்கவோ மாற்றவோ முடியாது, ஆனால் BASHPID ஐ மீண்டும் நியமிக்க முடியும், ஆனால் அது எந்த விளைவையும் ஏற்படுத்தாது.

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

BASHPID ஐ அமைக்க முடியாது. நீங்கள் அமைக்காதபோது அதன் சிறப்பு நிலையை இழக்கிறது, மேலும் இதை ஒரு சாதாரண மாறியாகப் பயன்படுத்தத் தொடங்கலாம்.

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

ஷெல்லின் செயல்முறை ஐடியை நீங்கள் ஒதுக்க முயற்சித்தாலும், அது ஏற்கனவே அதன் சிறப்பு நிலையை இழந்ததால் அது பயனர் வரையறுக்கப்பட்ட மாறியாக கருதப்படும்.

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

இந்த வழக்கில், BASHPID இன் சிறப்பு நிலையைப் பெற நீங்கள் ஒரு புதிய முனைய அமர்வைப் பயன்படுத்த வேண்டும்.

இந்த கட்டுரைக்கு அதுதான். $ மற்றும் BASHPID க்கும் உள்ள வித்தியாசத்தையும் இந்த கட்டுரையில் அவை எவ்வாறு நடந்துகொள்கின்றன என்பதையும் நாங்கள் கண்டோம். இந்த கட்டுரையின் வழியாக சென்று உங்கள் மதிப்புமிக்க கருத்தை எங்களுடன் பகிர்ந்து கொள்ளுங்கள்.