簡體   English   中英

如何設置程序的超時?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM