如何从我自己的 C UNIX shell 中删除僵尸进程

问题描述

我正在用 C 编写我自己的 UNIX-shell,如果在命令的末尾写 &,那么父进程不会停止子进程结束,子进程将成为后台

删除僵尸子进程,我使用了 waitpid(-1,&status,WNOHANG) 但它 returns 0 并且不删除任何僵尸进程,而有僵尸进程。

我应该做哪些改变?

//Everything is inside a while loop
     pid_t pid,wpid;
    
     pid=fork();
     
    if(pid==0){
    
        char *args1[] = {d1,NULL};   //d1 is the input from the user        
        
        execvp(d1,args1);
         
         exit(pid);
     }
        
     if (background == 0){ //If parent has to wait for the child to end
         waitpid(pid,NULL,0);
     }
     else{      //If parent does not wait for the child to end
                          
         fprintf(stderr,"Starting background process...\n");
          waitpid(-1,WNOHANG);

    }  

My shell output

这里的“shell”是我的 C 程序的名称

如您所见,即使在使用 ls<defunct> 之后,waitpid(-1,WNOHANG) 进程仍然存在

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)