2010-09-02 51 views
0

我正在尝试为程序开发一个测试用例,并且如果运行时间超过4秒,就会失败测试用例。 这怎么能在linux上完成? (我正在使用Ubuntu)在某段时间后中止程序

我知道我可以计时执行并且它的时间大于4,但这只是一个不好的方法。

谢谢!

+0

好吧,我不喜欢任何的答案,是不是有某种方式与超时做? – 2010-09-03 04:11:19

+0

你必须在某个地方设置一个限制。更糟糕的解决方案是不断循环检查;这会增加CPU使用率,并可能影响测试用例的持续时间。再次更新我的答案,您现在可以选择一个时间间隔(当前设置为0.5秒),如果您的测试用例立即结束,则不会有任何延迟。 – Lekensteyn 2010-09-03 10:30:46

回答

0

(shell脚本解决方案) 在后台运行你的测试用例,得到它的PId,并在4秒后检查进程是否仍在运行。

wait_seconds=4 
interval_seconds=0.5 
run_your_test_case & 
pid=$! 
max=`expr "$wait_seconds/$interval_seconds"` 
for ((I=0; I<$max; I++));do 
    if kill -0 $pid >/dev/null;then 
     echo 'test failed' 
    else 
     echo 'test ok' 
     break 
    fi 
    sleep $interval_seconds 
done 
+0

非常棒!将/ dev/null更改为2>/dev/null 但是,现在测试需要4秒的*最小值* – Mikhail 2010-09-02 17:05:07

+0

已更新,现在需要1,2,3或4秒。 – Lekensteyn 2010-09-02 18:52:02

0

最终的解决方案:

1 ./slowprogram.sh >/dev/null & 
    2 pid=$! 
    3 exitbreak=0 
    4 for c in {0..4}; do 
    5   sleep 1 
    6   kill -0 $pid 2>/dev/null 
    7   if [ $? -ne 0 ] ;then 
    8    exitbreak=1 
    9    break 
10   fi 
11 done 
12 if [ $exitbreak == 1 ]; then 
13   echo '[ OK ]' 
14 else 
15   echo '[FAIL]' 
16   kill -9 $pid 2>/dev/null 
17 fi 
0

你也可以做类似<command> & sleep 5 && kill ${!}

相关问题