Bash-Script возвращает неправильный 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 , но почему тогда переменная содержит 14336 и как это исправить?

0
24.11.2016, 18:12
1 ответ

$ BASHPID - это PID текущего процесса bash . Вы ищете $! ; см. man bash , особенно специальные параметры и управление заданиями. Кроме того, ping требует sudo , только если вы используете -f (флуд). Использование sudo может усложнить ситуацию, поскольку, насколько bash знает, что вы используете sudo , а не ping , поэтому $! вернет PID 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
$
2
28.01.2020, 02:34

Теги

Похожие вопросы