我使用以下脚本检查wget
是否已完成下载。为了检查这一点,我正在寻找它的PID,当它没有找到时,计算机就会关闭。这适用于wget
的单个实例,但是,我希望脚本能够查找所有已经运行的wget程序。
#!/bin/bash
while kill -0 $(pidof wget) 2> /dev/null; do
for i in '-' '/' '|' '\'
do
echo -ne "\b$i"
sleep 0.1
done
done
poweroff
编辑:如果脚本会检查至少有一个wget
实例是否正在运行并且只检查wget
是否已完成并关闭,我会很高兴电脑。
答案 0 :(得分:0)
我不认为杀人是一个正确的想法,
可能是像这样的一些事情
while [ 1 ]
do
live_wgets=0
for pid in `ps -ef | grep wget| awk '{print $2}'` ; # Adjust the grep
do
live_wgets=$((live_wgets+1))
done
if test $live_wgets -eq 0; then # shutdown
sudo poweroff; # or whatever that suits
fi
sleep 5; # wait for sometime
done
答案 1 :(得分:0)
您可以通过以下方式调整脚本:
#!/bin/bash
spin[0]="-"
spin[1]="\\"
spin[2]="|"
spin[3]="/"
DOWNLOAD=`ps -ef | grep wget | grep -v grep`
while [ -n "$DOWNLOAD" ]; do
for i in "${spin[@]}"
do
DOWNLOAD=`ps -ef | grep wget | grep -v grep`
echo -ne "\b$i"
sleep 0.1
done
done
sudo poweroff
但我建议使用 cron 代替主动等待方法,甚至使用wait
答案 2 :(得分:0)
除了其他答案之外,您可以通过最初将wget
的结果读入数组来满足至少一个pidof wget
pid的检查,例如:
pids=($(pidof wget))
if ((${#pids[@]} > 0)); then
# do your loop
fi
这也提供了一种在每个wget
操作完成时定期监视剩余pid的方法,例如,
修改强>
npids=${#pids[@]} ## save original number of pids
while (( ${#pids[@]} -gt 0 )); do ## while pids remain
for ((i = 0; i < npids; i++)); do ## loop, checking remaining pids
kill -0 ${pids[i]} || pids[$i]= ## if not unset in array
done
## do your sleep and spin
done
poweroff
可能还有很多方法可以做到。这只是我想到的一个。