2010-01-08 35 views
9

Tôi là người mới bắt đầu trong lập trình bash shell. Bạn có thể cho tôi biết về biểu tượng '$$' trong bash shell không?

Nếu tôi thử như sau

#> echo $$ 

nó in

#>18756 

Bạn có thể cho tôi biết những gì biểu tượng này được sử dụng cho và khi nào?

+0

Điều gì đã trở thành truyền thống cũ tốt về việc đọc sách hướng dẫn sử dụng tốt cho vỏ của bạn? – Jens

Trả lời

16

Đó là id quá trình của chính quy trình bash.

Bạn có thể sử dụng nó để theo dõi quá trình của bạn qua cuộc sống của mình - sử dụng ps -p để xem nếu nó vẫn chạy, hãy gửi một tín hiệu sử dụng kill (tạm dừng quá trình chẳng hạn), thay đổi ưu tiên của nó với renice, và vân vân.

Id quá trình thường được ghi vào tệp nhật ký, đặc biệt khi nhiều phiên bản của tập lệnh chạy cùng một lúc, để giúp theo dõi hiệu suất hoặc chẩn đoán sự cố.

Dưới đây là the bash documentation nêu ra các tham số đặc biệt.

BASHPID, được ghostdog74 đề cập, được thêm vào phiên bản 4.0. Dưới đây là một ví dụ từ Mendel Cooper của Advanced Bash-Scripting Guide cho thấy sự khác biệt giữa $$$BASHPID:

#!/bin/bash4 

echo "\$\$ outside of subshell = $$" # 9602 
echo "\$BASH_SUBSHELL outside of subshell = $BASH_SUBSHELL" # 0 
echo "\$BASHPID outside of subshell = $BASHPID" # 9602 
echo 

(echo "\$\$ inside of subshell = $$" # 9602 
echo "\$BASH_SUBSHELL inside of subshell = $BASH_SUBSHELL" # 1 
echo "\$BASHPID inside of subshell = $BASHPID") # 9603 
# Note that $$ returns PID of parent process. 
+0

Hoặc bạn có thể liên kết trực tiếp đến tài liệu chính thức của Bash: http://www.gnu.org/software/bash/manual/bashref.html#Special-Parameters http://www.gnu.org/software/bash/manual /bashref.html#Shell-Variables – ephemient

+1

Ý tưởng hay - đã xong, cảm ơn. –

1

nếu bạn có bash, một tương đương tương đối gần là biến BASHPID. Xem man bash

BASHPID 
     Expands to the process id of the current bash process. This differs from $$ under certain circumstances, such as subshells 
     that do not require bash to be re-initialized. 
Các vấn đề liên quan