我在Tannenbaum关于MINIX的书中看到了一个简化的shell程序。
while(1) {
read_command(command, parameters);
if (fork() != 0)
wait(&status); /* parent code */
}
else {
execve(command, parameters, 0); /* child code */
}
}
当无限循环执行它的第一次迭代时,fork()将返回0表示它创建了一个子进程,当它执行第二次时,fork()不会创建一个新的子进程吗?wait(&status)将如何执行?
我刚开始理解操作系统是如何工作的。
谢谢!
fork
立即创建了一个新的进程,因此两个进程都看到fork
返回,但是返回值不同。在父进程中,返回值是子进程的非零进程ID,因此父进程执行wait
。在子进程中,fork
返回0,因此子进程执行execve
。