如何设置程序的超时?

时间:2009-06-20 14:32:38

标签: windows linux command-line timeout

我目前正在尝试为各种编程任务制作一个小型测试应用程序。它将运行可执行文件,该文件将在另一个文件上生成输出,然后将其与答案进行比较。到目前为止,我认为我将变得容易,但我有一个问题......

我想限制此可执行文件可以运行的时间,例如1秒或2秒。所以我想知道是否有一个选项可以在达到时间限制时暂停/退出程序。

现在的操作系统不是一个问题,它可以是windows或linux,虽然我以后会把程序切换到linux,所以如果有人可以给我一些提示如何做到这一点会更好。

足够的'喋喋不休',我只会问这个问题: 有没有办法设置程序在Linux或Windows上运行多长时间?

3 个答案:

答案 0 :(得分:6)

This script看起来它将为Linux完成这项工作(摘录如下)。

cleanup()
{
    kill %1 2>/dev/null             #kill sleep $timeout if running
    kill %2 2>/dev/null && exit 128 #kill monitored job if running
}

set -m               #enable job control
trap "cleanup" CHLD  #cleanup after timeout or command
timeout=$1 && shift  #first param is timeout in seconds
sleep $timeout&      #start the timeout
"$@"                 #start the job

它设置为超时运行的sleep命令,然后执行给定的程序。当睡眠退出时,脚本将清理并退出(从而取消您生成的过程)。

答案 1 :(得分:3)

在Windows中,Job对象可以限制其包含的进程运行的时间。以下是来自开源项目的示例:sandbox.cpp请参阅文件底部的帮助消息以获取使用信息。

答案 2 :(得分:1)

您可以使用线程,也可以设置闹钟()。以下是如何在Linux中设置alarm()的快速示例。

http://www.aquaphoenix.com/ref/gnu_c_library/libc_301.html#SEC301

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>

void 
catch_alarm (int sig){
    printf("Alarm event triggered\n");
    signal(sig, catch_alarm);
    exit(EXIT_SUCCESS);
}

int 
main(int argc, char *argv[]){

    signal (SIGALRM, catch_alarm);
    printf("set alarm\n"); 
    alarm(3);

    while(1){
        printf("hello world\n");
    }

    return 0;
}