1.什么是进程
进程是执行中的程序。当一个程序被加载到内存之后就变为了进程。 进程=程序+执行
2.父子进程
- 创建进程称为父进程,而新的进程称为子进程
- 当进程创建新进程时,可有两种执行可能: 父进程与子进程并发执行。 父进程等待,直到某个或全部子进程执行完。
- 新进程的地址空间也有两种可能: 子进程是父进程的复制品(它具有与父进程同样的程序和数据)。子进程加载另一个新程序。
3.fork()创建进程
pid_t fork(void);
函数的返回值:
<0 出错
=0 子进程
>0 父进程(其值为子进程的进程号)
- 先返回谁是不确定的,父子进程的调度的顺序是由调度器决定的,与进程的创建顺序无关。
- fork函数所创建的子进程是父进程的完整副本,复制了父进程的资源,包括内存的task_struct内容。
- 子进程拥有自己的虚拟地址空间,父子进程数据独有,(写时复制)代码共享。
- fork函数的返回值起到分流的作用,可以用fork的返回值判断哪个是父进程或子进程。
下面的两张图就表示父进程和相对应的子进程的内存映射: