2009-06-20 174 views
4

我正在嘗試爲各種編程任務製作一個小測試應用程序。它將運行可執行文件,該文件將在另一個文件上生成輸出,然後將其與答案進行比較。到目前爲止,我認爲我可以輕鬆解決,但是我遇到了問題...如何設置程序的超時時間?

我想限制此可執行文件可以運行的時間,例如1秒或2秒。所以我想知道是否有一個選項可以在達到時間限制時暫停/退出程序。

操作系統現在不是問題,它可以是Windows或Linux,但我後來會將程序切換到Linux,所以如果有人可以給我一些關於如何做到這一點的提示,那會更好。

那麼足夠的'blabbering',我會問這個問題: 有沒有一種方法來設置程序可以在Linux或Windows上運行多長時間?

+1

用哪種語言編寫測試應用程序?我的意思是很多事情都依賴於它。也許線程是一個選項,或者可以使用通過超時/事件構建功能。我認爲這對於可能的答案至關重要。 – merkuro 2009-06-20 14:42:38

回答

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 
"[email protected]"     #start the job 

它設置一個睡眠命令運行超時,然後執行給定的程序。當睡眠結束時,腳本將清理並退出(從而取消生成的進程)。

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; 
} 
3

在Windows中,工作對象可以限制它們所包含的進程運行多長時間。以下是來自開源項目的示例:sandbox.cpp請參閱文件底部的幫助消息以獲取使用信息。

+0

一直在尋找一個這樣的簡單工具。 +1源代碼和可執行文件在一個地方。 – vmrob 2014-01-02 22:41:04

相關問題