似乎无法用bash脚本杀死进程

时间:2014-05-11 14:45:39

标签: linux bash raspberry-pi

我一直试图用批处理脚本杀死一个进程,我似乎无法让它工作我已经在线阅读了很多教程并尝试了不同的东西我似乎无法让它杀死过程

如何运行:(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脚本的新手,而且非常令人困惑

1 个答案:

答案 0 :(得分:0)

我怀疑你会发现这是由于竞争条件造成的。

  1. 如果您杀了screencgminerEU将立即死亡,反之亦然
  2. 您已pkill向两个进程发送信号
  3. pkill正在争夺第二个进程,直到它死亡。

    我建议您尝试从-f中删除pkill,使其仅按进程名称而不是完整命令行终止。

    这样,它只会杀死cgminerEU进程,而不会杀死同名的screen进程(无论如何都将作为依赖关系死掉)。

    PS:curl有一个-s,以避免通过电子邮件发送进度指示器。