核心思想:回收子进程描述符
//wait_task_zombie和wait_task_continued回收子进程描述符(注销身份证),子进程彻底消失
do_wait
=>add_wait_queue(¤t->signal->wait_chldexit,&wait);
=>repeat:
current->state = TASK_INTERRUPTIBLE;
tsk = current;
do
list_for_each(_p,&tsk->children)
p = list_entry(_p, struct task_struct, sibling);
ret = eligible_child(pid, options, p);
switch (p->state)
if (p->exit_state == EXIT_DEAD)
continue;
if (p->exit_state == EXIT_ZOMBIE)
if (ret == 2)
goto check_continued;
if (!likely(options & WEXITED))
continue;
retval = wait_task_zombie(p, (options & WNOWAIT), infop, stat_addr, ru);
check_continued:
retval = wait_task_continued(p, (options & WNOWAIT), infop, stat_addr, ru);