2015-04-05 28 views
-2

我的目標是計算execvp程序的運行時間。 我希望程序只運行5秒鐘; 我該怎麼做?如何傳達由execvp調用的程序的運行時間?

我想知道,如果a.out的下5秒

void run_after_compilation(char **argv, int flag) { 
    pid_t runner; 
    char *cmd [] = {"./a.out", NULL}; 
    int status; 
    int fdin = open(argv[2],O_RDONLY); 
    int fdout = open ("output.txt", O_CREAT | O_RDWR, 0466); 

    if ((runner = fork()) < 0) {error("could not make fork");} 
    else if (runner == 0) { 
     if ((execvp(cmd[0],cmd)) < 0) {} 
     exit(0); 
    } else if (runner != 0) { 
     waitpid(runner,&status,0); // wait the execute to end 

    } 

    close(fdin);close(fdout); /*closing the files*/ 
} 

跑了,這是我的想法:

for (i = 0; i < 5; i++) { 
    if (waitpid(runner,&status,WNOHANG) > 0) 
     if (WIFSTOPPED(status)) { 
      break; 
     } else {sleep(1);} 

} 
if(!WIFSTOPPED(status)) kill (runner, SIGUSR1); 
+0

你所有的問題都傾向於這種類型 - 這是我的問題,爲我解決。請先嚐試一下,回報你遇到的具體問題,也許有人會幫助你。 – kaylum 2015-04-05 12:02:02

+0

我已經添加了我的想法 - 它仍然沒有工作 – user3253375 2015-04-05 12:27:19

+0

我仍然不明白!我讀了很多,我沒有得到它 – user3253375 2015-04-05 13:26:33

回答

0

所有我需要的是檢查waitpid函數(亞軍,&狀態, WNOHANG),如果程序已經完成,那麼結果將與0不同,否則它沒有完成。

相關問題