如何测量execvp调用的程序的运行时?

时间:2015-04-05 11:49:03

标签: linux system-calls

我的目标是计算运行execvp程序的时间。 我希望程序只运行5秒钟; 我该怎么做?

我想知道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);

1 个答案:

答案 0 :(得分:0)

我需要的是每次都检查waitpid(跑步者,状态,WNOHANG),如果程序已经完成,那么结果将与0不同,否则它还没有完成。