我一直试图用批处理脚本杀死一个进程,我似乎无法让它工作我已经在线阅读了很多教程并尝试了不同的东西我似乎无法让它杀死过程
如何运行:(crontab)
* * * * * /home/pi/status.sh > /home/pi/logs/status.log 2>&1
日志:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
^M 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0^M100 10 100 10 0 0 73 0 --:--:-- --:--:-- --:--:-- 153^M100 10 100 10 0 0 72 0 --:--:-- --:--:-- --:--:-- $
/home/pi/status.sh: 6: /home/pi/status.sh: 18645: not found
status.sh:
Bridge=$(curl http://www.mywebsite.com/dir/cache/timestamp.txt)
timestamp=$( date +%s )
total=`expr $timestamp - $Bridge`
if (($total > 300));
then
#p=$(pidof cgminerEU)
#sudo killall -9 cgminerEU
#sudo kill -9 $(pidof cgminerEU)
sudo pkill -f cgminerEU
fi
有问题的流程
pi@raspberrypi ~ $ ps ax | grep cgminerEU
26018 ? Ss 0:13 SCREEN -dm ./cgminerEU
26019 pts/0 Ssl+ 89:32 ./cgminerEU
30989 pts/2 S+ 0:00 grep --color=auto cgminerEU
是的 /home/pi/status.sh:6:/home/pi/status.sh:18645:未找到 意味着它试图杀死pid 18645?对不起,我是bash脚本的新手,而且非常令人困惑
答案 0 :(得分:0)
我怀疑你会发现这是由于竞争条件造成的。
screen
,cgminerEU
将立即死亡,反之亦然pkill
向两个进程发送信号 pkill
正在争夺第二个进程,直到它死亡。
我建议您尝试从-f
中删除pkill
,使其仅按进程名称而不是完整命令行终止。
这样,它只会杀死cgminerEU
进程,而不会杀死同名的screen
进程(无论如何都将作为依赖关系死掉)。
PS:curl
有一个-s
,以避免通过电子邮件发送进度指示器。