命令简介

运行指定的命令,如果在指定时间后仍在运行,则杀死该进程。用来控制程序运行的时间。

使用方法

timeout [选项] 数字[后缀] 命令 [参数]...

后缀”s”代表秒(默认值),”m”代表分,”h”代表小时,”d”代表天。

选项详解

长选项必须使用的参数对于短选项时也是必需使用的。
  -s, --signal=信号
        指定在超时时发送的信号。信号可以是类似"HUP"的信号名或是信号数。
        查看"kill -l"以获得信号列表
      --help        显示此帮助信息并退出
      --version        显示版本信息并退出

如果程序超时则退出状态数为124,否则返回程序退出状态。
如果没有指定信号则默认为TERM 信号。TERM 信号在进程没有捕获此信号时杀死进程。
对于另一些进程可能需要使用KILL (9)信号,当然此信号不能被捕获。

示例

timeout 10 command   #10秒后结束command命令.

《shell专家编程》

1.超过timeout时间还没执行完,则kill进程,发邮件告警:

set -x
mailSend()
{
        mailContent="xxxx Web response time over 5 seconds"
        echo $mailContent | mail -s "xxxxxx Web TimeOut" xxxxx@xxx.cion
}
timeout()
{
        waitfor=3
        command=$*
        $command &
        commandpid=$!
        ( sleep $waitfor ; kill -9 $commandpid  > /dev/null 2>&1 && mailSend ) &
        watchdog=$!
        sleeppid=$PPID
        wait $commandpid > /dev/null 2>&1
        kill $sleeppid > /dev/null 2>&1
}
#测试的函数
test123()
{
        sleep 20
}
timeout test123

2.超过timeout时间还没执行完,只发邮件告警,程序正常执行:

mailSend()
{
        mailContent="xxxxe Web response time over 5 seconds,Please have a check !"
        echo $mailContent | mail -s "xxxxx WEB response time over 5 senconds" $mailTo
}
timeout()
{
        waitfor=6
        command=$*
        $command &
        commandpid=$!
        ( sleep $waitfor ;  mailSend ) &
        watchdog=$!
        sleeppid=$PPID
        wait $commandpid > /dev/null 2>&1
        kill  -9 $watchdog > /dev/null 2>&1
        kill $sleeppid > /dev/null 2>&1
}