我在 XV6 中终止了进程 "A","A" 的 child 进程发生了什么

I kill process "A" in XV6 , what happens to child processes of "A"

在正常情况下,当一个进程被终止时,其所有 child 个进程必须附加到 'init' 个进程(所有进程中的大 Grand-Daddy 个)。奇怪的是,XV6 似乎没有这样做。下面是XV6

中proc.c文件中'kill'函数的代码
int kill(int pid)
{
struct proc * p;

acquire(&ptable.lock);

for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){
    if(p->pid == pid){
        p->killed = 1;

        if(p->state == SLEEPING)
           p->state = RUNNABLE;
    release(&ptable.lock);
    return 0;
    }
}//end of for loop

release(&ptable.lock);
return -1;
}

为什么杀死的进程没有从进程table中删除?
为什么它的 children 没有被 'init' 采用?
看在上帝的份上,为什么被杀死的进程再次变为 RUNNABLE?

在POSIX中,要接收和处理信号(终止进程就是处理信号),必须安排一个进程。在那之前,信号被认为是挂起的,进程仍然存在。

当进程实际终止并从内核数据结构中删除时,子进程可能是孤立的。