2014-10-03 82 views
1

看我需要能够调用这个:杀从庆典

手表-n1执行cat/proc/mdstat

从庆典。

对于raid创建监视(在mdadm之后--create等),然后杀死它,然后构建过程将结束。

#!/bin/bash 
#PID=$! 
while 
progress=$(cat /proc/mdstat |grep -oE 'recovery = ? [0-9]*') 
do 
    watch -n1 cat /proc/mdstat 
    PID=$(pidof watch) 
    echo "$PID" >> /mnt/pid 
    if (("$progress" >= "100")) 
     then 
      break 
      kill -9 $PID 
    fi 
done 
echo "done" 

但我无法弄清楚如何从bash中取出手表。我尝试了PID=$!PID=$$pidof watch在他的循环中,但不能将正确的PID分配给我的变量以使kill -9 $PID

+2

另外,你基本上不应该使用'kill -9'。在正常情况下,只需“杀死”就足够了。 – tripleee 2014-10-03 11:49:18

+0

在这段代码中,'break'会导致脚本退出循环,所以'kill'永远不会被执行。切换这两条语句的顺序。 – tripleee 2014-10-03 11:50:44

+0

请注意watch命令在前台运行。脚本永远不会超过手表的第一次执行。 – nos 2014-10-03 11:54:00

回答

2

这听起来像你需要观看运行,直到进度达到100?

watch -n1 cat /proc/mdstat & 
WATCHPID=$! 
while 
progress=$(cat /proc/mdstat |grep -oE 'recovery = ? [0-9]*') 
do 

if (("$progress" >= "100")) 
    then 
     break 

fi 
sleep 1 
done 

kill $WATCHPID 

echo "done" 
+0

太棒了!我只是不明白你是怎么做的 >看-n1猫/ proc/mdstat **&** 不会背景?我试了一下,但无法从背景中收看 – gek 2014-10-03 13:12:38

+0

@gek我真的不明白你在问什么。 '&'使命令转到后台。您的代码没有“&”。 – nos 2014-10-03 13:56:58