Linux-fork创建子进程

Posted jiangtongxue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux-fork创建子进程相关的知识,希望对你有一定的参考价值。

1、为什么要创建子进程

(1)、每一次程序运行都需要一个进程

(2)、多个进程实现宏观上的并行

2、fork的内部原理

(1)、进程的分裂生长模式。

  如果操作系统需要一个新进程来运行一个程序,那么操作系统会用一个现有的进程来复制生成一个新的进程。

(2)、fork函数调用一次会返回两次,返回值等于0的就是子进程,而返回值大于0的就是父进程。

(3)、典型的使用fork的方法:使用fork后然后用if判断返回值,并且返回值大于0时就是父进程,等于0时就是子进程。

(4)、fork的返回值在子进程中等于0,在父进程中等于本次fork创建的子进程的进程ID。

3、关于子进程

(1)、子进程有自己独立的PCB

(2)、子进程被内核同等调度

4、父子进程对文件的操作

(1)、子进程继承父进程中打开的文件

  a、父进程先open打开一个文件得到fd,然后在fork创建子进程。之后在父子进程中各自write向fd中写入内容

  b、测试结论:接续写。实际上本质原因是父子进程之间的fd对应的文件指针是彼此关联的(特别像O_APPEND标志后的样子)

5、父子进程各自独立打开同一文件实现共享

(1)、父进程open打开1.txt然后写入,子进程打开1.txt然后写入,结论是:分别写。

原因是父子进程分离后才各自打开的1.txt,这个时候两个进程的PCB已经独立了,文件表也独立了,因此2次读写是完全独立的。

(2)、open时使用O_APPEND标志后,实际测试结果表明O_APPEND标志可以把父子进程各自独立打开的fd的文件指针给关联起来,实现分别写。

6、总结:

(1)、父进程在没有fork之前自己做的事情对子进程有很大影响,但是父进程在fork之后,在自己的if里做的事情就对子进程没有影响了。本质原因就是因为fork内部实际上已经复制父进程的PCB生成一个新的子进程,并且fork返回时子进程已经完全和父进程脱离并且独立的被操作系统OS调度执行了。

(2)、子进程的最终目的是要独立的去运行另外的程序。

 

以上是关于Linux-fork创建子进程的主要内容,如果未能解决你的问题,请参考以下文章

38父进程子进程进程组作业和会话

创建一个不是创建进程子进程的新进程

子进程子回溯

Linux网络编程——进程池实现过程详解

Linux创建子进程的函数说明

multiprocessing模块创建子进程