Saya punya masalah dengan Bash, dan saya tidak tahu mengapa.
Di bawah shell, saya masukkan:
echo $$ ## print 2433
(echo $$) ## also print 2433
(./getpid) ## print 2602
"getpid" adalah program C untuk mendapatkan pid saat ini, seperti:
int main() { printf("%d", (int)getpid()); return 0; }
Yang membingungkan saya adalah:
- Saya pikir "(perintah)" adalah sub-proses (apakah saya benar?), Dan saya pikir pidnya harus berbeda dengan pid induknya, tetapi mereka sama, mengapa ...
- ketika saya menggunakan program saya untuk menunjukkan pid antara kurung, pid itu menunjukkan berbeda, apakah itu benar?
- Apakah '$$' itu seperti makro?
Bisakah kamu membantuku?
echo $$ $BASHPID ; ( echo $$ $BASHPID )
menunjukkan hal itu. Kurung bundar membuat subkulit. Pernyataan dapat mengubah nilai variabel, dan shell induk tidak harus melihat perubahan itu. Ini diimplementasikan sebagai fork()
operasi.
getpid
akan menunjukkan ID proses yang berbeda bahkan jika itu tidak dijalankan dalam subkulit.