Command-Line
Bash 腳本返回錯誤的 PID
當我執行我的 bash 腳本時,我得到了錯誤的 PID。我需要 PID 在結束時終止程序。這是受此問題影響的簡化腳本:
echo 'PASSWORD' | sudo -S ping -f '10.0.1.1' & PING_PID=$BASHPID; echo $PING_PID;
輸出例如
[1] 14336 PC:~ Account$ PING 10.0.1.1 (10.0.1.1): 56 data bytes . .PC:~ Account$..Request timeout for icmp_seq 18851 ...
但是當我尋找活動監視器(在 Mac 上)時,我看到 ping-process 有 PID
14337
,但是為什麼變數包含 then14336
以及如何修復它?
$BASHPID 是目前
bash
程序的 PID。您正在尋找$!
;見man bash
,特別是特殊參數和作業控制。此外,僅當您使用(洪水)時才ping
需要。使用可能會使事情複雜化,因為據了解您正在執行,而不是,因此會返回 的 PID 。sudo``-f``sudo``bash``sudo``ping``$!``sudo
$ ping -c 5 www.example.com & echo "The PID of ping is $!" ; sleep 6 [1] 4022 The PID of ping is 4022 PING www.example.com (192.168.218.77) 56(84) bytes of data. 64 bytes from 192.168.218.77: icmp_seq=1 ttl=64 time=0.260 ms 64 bytes from 192.168.218.77: icmp_seq=2 ttl=64 time=0.329 ms 64 bytes from 192.168.218.77: icmp_seq=3 ttl=64 time=0.382 ms 64 bytes from 192.168.218.77: icmp_seq=4 ttl=64 time=0.418 ms 64 bytes from 192.168.218.77: icmp_seq=5 ttl=64 time=0.434 ms --- www.example.com ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4000ms rtt min/avg/max/mdev = 0.260/0.364/0.434/0.066 ms [1]+ Done ping -c 5 www.example.com $