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){}
为了收获但似乎没有摆脱僵尸进程。我该怎么办才能收获呢?
此外,我不确定我是否在这里做背景。
答案 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);
}
}
您将未初始化的pid
与fork()
=&gt;的结果进行比较未定义的行为(之后,您将此比较的结果与0进行比较)
您应该将if ((pid == fork()) == 0){
替换为if ((pid = fork()) == 0){