如何设置程序超时?

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

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

操作系统现在不是一个问题,它可以是Windows或Linux,但我后来将程序切换到Linux,所以最好是有人可以给我一些提示,如何做到这一点。

那么足够的'blabbering',我只会问一个问题: 有没有一种方法来设置程序可以在Linux或Windows上运行多长时间?

这个脚本看起来好像会做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 

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

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

您可以使用线程或设置闹钟()。 下面是如何在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; }