问题描述
我正在用 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);
}
这里的“shell”是我的 C 程序的名称。
如您所见,即使在使用 ls<defunct>
之后,waitpid(-1,WNOHANG)
进程仍然存在
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)