我有一个带有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。
答案 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