bash - 在设置超时后终止子进程

时间:2012-04-23 08:42:35

标签: bash shell debian

我希望有人能够帮助我 我需要一个shell脚本循环,它将运行循环内部15秒的内容。例如,

if (true)
    run command for 15 seconds
fi
    kill PID

我是shell脚本的新手,所以我迷失了。 如果这有任何不同,我也在使用debian instll

感谢任何帮助

2 个答案:

答案 0 :(得分:3)

您在寻找timeout命令吗?

答案 1 :(得分:0)

以下bash脚本可能适合您。该脚本将在开始循环之前将初始纪元时间设置为变量。循环运行时,将使用当前纪元时间设置另一个变量。将比较两个纪元时间,只要差异小于或等于15,您的命令将继续运行。请注意,在下面的脚本中,当前运行的命令是“echo”,计算$ {COUNTER}“'。您应该更改脚本的这一部分以匹配您要完成的操作。一旦两个纪元时间的差异大于15,脚本将退出。此时您需要启动kill命令。如果确实发生错误,您应该在“YourLogFile”中看到“ERROR ... YourScript.sh failed”(将您的日志文件设置为您想要的)

注意:无论您在此循环内尝试运行的是什么,都可能在15秒内运行很多次。通过使用下面的脚本作为测试,您将看到echo命令每秒运行超过50次。

#!/bin/bash

LOOP="true"
INITIAL_TIME=$(date "+%s")

while [[ ${LOOP} == true ]]; do

    CURRENT_TIME=$(date "+%s")
    COUNTER=$(expr ${CURRENT_TIME} - ${INITIAL_TIME})

    if [[ ${COUNTER} -le "15" ]]; then

        echo "counting ${COUNTER}"
        # RUN YOUR COMMAND IN PLACE OF THE ABOVE echo COMMAND

    elif [[ ${COUNTER} -gt "15" ]]; then
        exit 0
            #INITIATE YOUR KILL COMMAND IN PLACE OF OR BEFORE THE exit
    else
        echo "ERROR... YourScript.sh failed" >> /YourLogFile
    fi

done