return 0语句将值0返回给操作系统或生成可执行文件的进程?
示例:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
fork();
return 0;
}
使用fork()创建的第二个进程(子进程)将值0返回给生成它(父)或操作系统的进程?
答案 0 :(得分:4)
如果父母调用wait(&status)
,则将零写入状态(假设孩子没有遇到系统错误或被信号终止)。在你给出的情况下(再次假设没有错误),子进程由init继承,它等待它,得到零,并忽略它。为了澄清,假设子进程在父进程之前退出:在这种情况下,当子进程处于僵尸状态时,子进程终止并且系统在进程表中维护零。然后父进程终止,并且所有的zombie子进程都由init继承。然后init等待子进程,允许系统删除进程表条目。如果父级首先终止,那么当父级终止时,它的所有子级(僵尸或非僵尸)都将由init继承。然后孩子终止,进入僵尸状态(很短的时间,因为init将很快安排),直到init等待它,丢弃零,并删除进程表中的子条目。
换句话说,零存储在进程表中,直到父进程等待它为止。如果原始父母不等,新父母将会。新的父亲几乎总是初始化,但有些技术(例如ptrace)可能会导致不同的进程成为新的父进程。