ऐसा क्यों है कि जब मैं नीचे की स्क्रिप्ट चलाता हूं, तो माता-पिता और बच्चे दोनों सोचते हैं कि उनके पास एक ही तरह की तस्वीर है?
#!/bin/bash
foo ()
{
while true
do
sleep 5
echo child: I am $$
done
}
( foo ) &
echo parent: I am $$ and child is $!
>./test.sh
parent: I am 26542 and child is 26543
>child: I am 26542
child: I am 26542
उत्तर:
उत्तर № 1 के लिए 4बैश में, हैं $$
तथा $BASHPID
चर जो कुछ भ्रामक हैं। $$
स्क्रिप्ट की एक प्रक्रिया आईडी है। $BASHPID
बश के वर्तमान उदाहरण की एक प्रक्रिया आईडी है। ये चीजें समान नहीं हैं, लेकिन अक्सर समान परिणाम देते हैं। आपके मामले में, आपने इसका गलत उपयोग किया है। की जगह $$
साथ में $BASHPID
समारोह में foo
समस्या का समाधान होगा ।
देख आंतरिक चर का संभाग बैश एडवांस्ड स्क्रिप्टिंग गाइड अधिक जानकारी के लिए।