[英]How to set timeout for a program?
我目前正在嘗試為各種編程任務制作一個小型測試應用程序。 它將運行可執行文件,該文件將在另一個文件上生成輸出,然后將其與答案進行比較。 到目前為止,我認為我將變得容易,但我有一個問題......
我想限制此可執行文件可以運行的時間,例如1秒或2秒。 所以我想知道是否有一個選項可以在達到時間限制時停止/退出程序。
現在的操作系統不是一個問題,它可以是windows或linux,雖然我以后會把程序切換到linux,所以如果有人可以給我一些提示如何做到這一點會更好。
那么“喋喋不休”,我只會問一個問題: 有沒有辦法設置程序在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
它設置為超時運行的sleep命令,然后執行給定的程序。 當睡眠退出時,腳本將清理並退出(從而取消生成的進程)。
在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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.