首页 > 解决方案 > Bash,如何检查 C 程序是否超时

问题描述

我想在 bash 脚本中运行编译为 foo 的 C 程序 foo.c 并查看它是否超时。

foo 有一个参数和 10 秒超时。我想检查程序 foo 是否超时或执行。如果超时,我想退出 0。

#!/bin/sh
# -*-sh-*-
/foo $1 10
if [$? -eq 0]
    then
        exit 0;
fi
exit 1;

标签: cbash

解决方案


使用timeout命令:

timeout 10s ./foo
if [ $? -eq 124 ] ; then
    exit 0
else
    exit 1
fi

来自man timeout

如果命令超时,并且未设置 --preserve-status,则以状态 124 退出。否则,以 COMMAND 状态退出。如果未指定信号,则在超时时发送 TERM 信号。TERM 信号会杀死任何不阻塞或捕获该信号的进程。可能需要使用 KILL (9) 信号,因为无法捕获此信号,在这种情况下退出状态为 128+9 而不是 124。


推荐阅读