最近在看操做系统的书,在讲到用fork()建立子进程时,有些地方一时迷惑,最终理解,特记录下来。以下:app
//建立一个子进程;
#include "csapp.h" 操作系统
int main() {
fork();
printf("hello/n");
exit(0);}指针
//打印出两个hello;不难理解,主程序一个,子程序一个;那么若是是两个fork()呢? 进程
#include "csapp.h" int main() {it
fork(); //位置1·程序
fork(); //位置2fork
printf("hello/n");printf
exit(0); }系统
//结果打印出4个hello;
为何会这样呢?
原来在建立子程序时,子程序会获得父程序的一份拷贝,那么其中也包括下一条指令指针。具体以下:
开始只有一个父进程;
父进程执行完第一个fork()(这时下一条指令指针变成位置2)。
建立出的一个子进程(这个进程也会从位置2开始执行)
因此这个子进程会又建立一子子进程;(这时就有两个子进程了)
父进程再执行第二个fork();
又会建立一个子进程(这时就三个子进程了)
加上父进程一共四个,因此输出4个hello world;
这是我我的的理解,若是有大牛感受这个理解有问题。请留言指点~谢谢