用于在bash脚本中循环和休眠

时间:2014-04-03 07:43:28

标签: linux bash for-loop sleep kill

我有一个带有for循环的bash脚本,我想要睡X秒。

#!/bin/sh
for i in `seq 8`; 
    do ssh w$i 'uptime;
    ps -elf|grep httpd|wc -l;
    free -m;
    mpstat'; 
done &
pid=$!
kill -9 $pid

在Bash中:sleep 2睡2秒钟。我想在2秒后自动杀死pid。

2 个答案:

答案 0 :(得分:2)

您需要将循环放在包装器中:

您的脚本(我称之为foo.sh

#!/bin/sh
for i in `seq 8`; 
    do ssh w$i 'uptime;
    ps -elf|grep httpd|wc -l;
    free -m;
    mpstat'; 
done

包装器

#!/bin/sh
foo.sh &
pid=$!
sleep 3         #sleep takes number of seconds
kill $pid

您还可以ps -p $pid -o pid | grep $pid

检查您的流程是否已存在

答案 1 :(得分:0)

喜欢在评论中提出

#!/bin/sh
for i in `seq 8`; 
    do ssh w$i 'uptime;
    ps -elf|grep httpd|wc -l;
    free -m;
    mpstat'; 
done &
pid=$!
sleep 2
kill -9 $pid

在这个版本中,一个ssh进程可能永远存在。所以也许最好分别杀死每个ssh命令:

#!/bin/sh
for i in `seq 8`; 
    do ssh w$i 'uptime;
    ps -elf|grep httpd|wc -l;
    free -m;
    mpstat' &;
    pid=$!
    sleep 0.3
    kill $pid
done