Bash 脚本返回错误的 PID

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 进程有 PID 14337,但为什么变量包含 then14336以及如何修复它?

答案1

$BASHPID 是当前进程的PID bash。您正在寻找$!;请参阅man bash,特别是特殊参数和作业控制。另外,仅当您使用(洪水)时才ping需要。使用可能会使事情变得复杂,因为据了解您正在运行,而不是,因此将返回 的 PID 。sudo-fsudobashsudoping$!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
$

相关内容