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
...
하지만 Activity Monitor(Mac)를 보면 ping 프로세스에 PID 가 있는 것을 볼 수 있는데 14337
왜 변수에 then이 포함되어 있고 14336
어떻게 수정합니까?
답변1
$BASHPID는 현재 프로세스의 PID입니다 bash
. 특히 특수 매개변수 및 작업 제어를 참조하십시오 $!
. 또한 man bash
(flood) 를 사용하는 경우 에만 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
$