代码之家  ›  专栏  ›  技术社区  ›  Tomas

“For”循环并在Bash脚本中休眠

  •  6
  • Tomas  · 技术社区  · 10 年前

    我有一个Bash脚本 for 循环,我想睡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
    

    巴什语: sleep 2 睡两秒钟。如何在两秒后自动关闭pid?

    2 回复  |  直到 5 年前
        1
  •  2
  •   Mathias    10 年前

    如评论中所建议

    #!/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
    
        2
  •  2
  •   Eric Leschinski Mr. Napik    10 年前

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

    您的脚本 (我称之为 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