Bash ile sorunum var ve nedenini bilmiyorum.
Kabuğun altına şunu giriyorum:
echo $$ ## print 2433
(echo $$) ## also print 2433
(./getpid) ## print 2602
"getpid" şu anki pid'i almak için bir C programıdır, örneğin:
int main() { printf("%d", (int)getpid()); return 0; }
Beni şaşırtan şey şudur:
- "(Komut)" bir alt işlem olduğunu düşünüyorum (ben haklı mıyım?), Ve onun pid üst pid ile farklı olması gerektiğini düşünüyorum, ama aynı, neden ...
- Programımı parantez arasında pid göstermek için kullandığımda, gösterdiği pid farklı, doğru mu?
- '$$' makro gibi bir şey mi?
Bana yardım eder misiniz?
echo $$ $BASHPID ; ( echo $$ $BASHPID )
bunu yaptığını gösteriyor. Yuvarlak parantezler alt kabuk oluşturur. İfadeler değişken değerleri değiştirebilir ve üst kabuk bu değişiklikleri görmemelidir. Bu bir fork()
işlem olarak uygulanır .
getpid
Alt kabukta çalıştırılmasa bile farklı bir işlem kimliği göstereceğini unutmayın .