Tôi có vấn đề với Bash, và tôi không biết tại sao.
Dưới vỏ, tôi nhập:
echo $$ ## print 2433
(echo $$) ## also print 2433
(./getpid) ## print 2602
"getpid" là một chương trình C để có được pid hiện tại, như:
int main() { printf("%d", (int)getpid()); return 0; }
Điều làm tôi bối rối là:
- Tôi nghĩ "(lệnh)" là một quá trình phụ (tôi có đúng không?) Và tôi nghĩ rằng pid của nó phải khác với pid cha của nó, nhưng chúng giống nhau, tại sao ...
- Khi tôi sử dụng chương trình của mình để hiển thị pid giữa dấu ngoặc đơn, pid mà nó hiển thị là khác nhau, phải không?
- là '$$' một cái gì đó giống như vĩ mô?
Bạn có thể giúp tôi được không?
echo $$ $BASHPID ; ( echo $$ $BASHPID )
chứng minh rằng nó làm. Dấu ngoặc tròn tạo ra một khung con. Các câu lệnh có thể thay đổi các giá trị biến và vỏ cha mẹ không được nhìn thấy các thay đổi đó. Điều này được thực hiện như là một fork()
hoạt động.
getpid
sẽ hiển thị ID tiến trình khác nhau ngay cả khi nó không chạy trong một lớp con.