我在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()不会创建一个新的子进程吗?等待(& status)将如何执行?
我不熟悉操作系统的工作原理。
谢谢!
答案 0 :(得分:1)
fork
立即创建一个新进程 ,因此两个进程都会看到fork
返回,但返回值不同。在父级中,返回值是子级的非零进程ID,因此父级执行wait
。在孩子中,fork
返回0,因此孩子执行execve
。