【问题标题】:How to set timeout for a program?如何为程序设置超时?
【发布时间】:2010-11-04 12:53:41
【问题描述】:

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

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

目前的操作系统不是问题,可以是windows或linux,不过我以后还是会把程序切换到linux,所以如果有人能给我一些关于如何做到这一点的提示会更好。

“喋喋不休”已经够多了,我只想问这个问题: 有没有办法设置程序可以在 Linux 或 Windows 上运行多长时间的时间限制?

【问题讨论】:

  • 您使用哪种语言编写测试应用程序?我的意思是有些事情取决于它。也许线程是一种选择,或者可以使用通过超时/事件构建的功能。我认为这对于潜在的答案至关重要。

标签: windows linux command-line timeout


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 一直在到处寻找像这样的简单实用程序。 +1 源代码和可执行文件在一处。
    【解决方案3】:

    您可以使用线程,也可以设置alarm()。下面是一个如何在 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 2016-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多