等待系统调用完成

时间:2015-06-03 14:31:52

标签: c++ linux valgrind

我的任务是创建一个程序,该程序将包含程序列表的文本文件作为输入。然后它需要在程序上运行valgrind(一次一个)直到valgrind结束或直到程序达到最大分配时间。我有程序做我需要它做的一切除了它不等valgrind完成。我正在使用的代码具有以下格式:

//code up to this point is working properly
pid_t pid = fork();
if(pid == 0){
    string s = "sudo valgrind --*options omitted*" + testPath + " &>" + outPath;
    system(s.c_str());
    exit(0);
}
//code after here seems to also be working properly

我遇到了一个问题,即孩子只是调用系统并继续前进而不等待valgrind完成。因此,我猜测系统不是正确的使用呼叫,但我不知道我应该做什么电话。谁能告诉我如何让孩子等待valgrind完成?

2 个答案:

答案 0 :(得分:1)

我认为你正在寻找fork / execv。这是一个例子:

http://www.cs.ecu.edu/karl/4630/spr01/example1.html

另一种选择可能是popen。

答案 1 :(得分:0)

您可以forkexec您的计划,然后等待它完成。请参阅以下示例。

pid_t pid = vfork();
if(pid == -1)
{
    perror("fork() failed");
    return -1;
}
else if(pid == 0)
{
    char *args[] = {"/bin/sleep", "5", (char *)0};
    execv("/bin/sleep", args);  
}

int child_status;
int child_pid = wait(&child_status);
printf("Child %u finished with status %d\n", child_pid, child_status);