当用户态通过prctl(PR_SET_CHILD_SUBREAPER,1)的时候就是让当前进程像init进程一样来收养孤儿进程,称为subreaper进程,具体在os中的实现如下
case PR_SET_CHILD_SUBREAPER:
me->signal->is_child_subreaper = !!arg2;
if (!arg2)
break;
walk_process_tree(me, propagate_has_child_subreaper, NULL);
break;
可以看到这里通过walk_process_tree的方式来遍历所有可能的僵尸进程