linux实验-fork()函数

这次Linux实验中,起初,我对于fork()的定义很模糊,导致再写实验时遇到了很多的困难,于是查阅资料并咨询了一些同学,搞懂了这一概念。
首先先介绍一下进程。

进程的定义

1、进程是一个程序的一次执行的过程。
在Linux环境下,每个正在运行的程序都称为进程。每个进程包含进程标识符及数据,这些数据包含进程变量、外部变量及进程堆栈等。
2、进程与程序
由于一个进程对应一个程序的执行,但进程不等同于程序。因为程序是静态的概念,进程是动态的概念。进程是程序执行的过程,包括了动态创建、调度和消亡的整个过程。进程是程序执行和资源管理的最小单位。对系统而言,当用户在各级系统中键入命令执行一个程序的时候,它将启动一个进程,因此,一个程序可以对应多个进程。

fork()函数

使用fork函数创建进程时,新的进程叫子进程,原来调用fork函数的进程则称为父进程。
子进程会复制父进程的数据和堆栈空间,并继承父进程的用户代码、组代码、环境变量、已经打开的文件代码、工作目录及资源限制等,但是子进程和父进程使用不同的内存空间。


fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
1)在父进程中,fork返回新创建子进程的进程ID;
2)在子进程中,fork返回0;
3)如果出现错误,fork返回一个负值;
在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。在子进程中,fork函数返回0,在父进程中,
fork返回新创建子进程的进程ID。我们可以通过fork返回的值来判断当前进程是子进程还是父进程。
引用一位网友的话来解释fpid的值为什么在父子进程中不同。“其实就相当于链表,进程形成了链表,父进程的fpid(p 意味point)指向子进程的进程id,因为子进程没有子进程,所以其fpid为0.

发布了20 篇原创文章 · 获赞 2 · 访问量 334

猜你喜欢

转载自blog.csdn.net/weixin_44931542/article/details/105637868