2015-04-05 2 views
-2

Моя цель - подсчитать время для запуска программы execvp. Я хочу, чтобы программа запускала только 5 секунд вершин; как мне это сделать?Как messaure время выполнения программы, вызванной 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

+0

Я добавил свою мысль - ее все еще не работает – user3253375

+0

Я все еще не понимаю! я читал много, и я не получаю его – user3253375

ответ

0

все что мне нужно, чтобы проверить waitpid (бегуна, & статус, WNOHANG) каждый раз, если программа завершена, результат будет отличаться от 0, иначе он не закончится.

Смежные вопросы