C-收获儿童过程和背景

时间:2016-04-29 13:27:21

标签: c shell

    pid_t pid;

    if ((pid == fork()) == 0){
            if (execvp(arg[0], arg) < 0) {
                printf("%s: Command not found.\n", arg[0]);
                exit(0);
            }

    }

    if (background == 0 )
    {
        int status;
        if (waitpid(pid, &status, 0) < 0)
            printf("waitfg: waitpid error");
        while(waitpid(-1, 0, WNOHANG) >= 0){}


    }
    else
    {
    printf("%d %s", pid, cmdline);
    }

我有我的程序的代码,我试图让父母收获所有子进程,问题是它仍然没有收获。我正在尝试使用代码:

 while(waitpid(-1, 0, WNOHANG) >= 0){}

为了收获但似乎没有摆脱僵尸进程。我该怎么办才能收获呢?

此外,我不确定我是否在这里做背景。

1 个答案:

答案 0 :(得分:0)

你的代码错了:

pid_t pid;

if ((pid == fork()) == 0){  // PROBLEM HERE
        if (execvp(arg[0], arg) < 0) {
            printf("%s: Command not found.\n", arg[0]);
            exit(0);
        }

}

您将未初始化的pidfork() =&gt;的结果进行比较未定义的行为(之后,您将此比较的结果与0进行比较)

您应该将if ((pid == fork()) == 0){替换为if ((pid = fork()) == 0){