Linux进程概念二

我们利用fork函数来辅助我们讲解进程

首先认识两个调用进程地址的函数:getpid(),和getppid(),他们分别可以调用自己的pid和父进程的pid

fork()可以在代码层面来创建子进程,一般而言,父进程fork出来的子进程与父进程代码和数据相同,头文件是<unistd.h>,返回值是get_t:

看到图示的代码和之前理论所说,会发现有很多问题,我们来一一解决:

1,为什么给id返回0的是子进程而返回id大于0的是父进程?

        父进程要对子进程进行管理,也就是权限更大,而子进程无权管辖父进程,所以没必要给子进程返回pid,而父进程因为要管理子进程所以可接收子进程的pid

由图可得知,父进程的pid和子进程的ppid互相对应

在进程fork之后,父进程与子进程的代码是共享的,一般来说不能被修改

但是数据是可以被修改的,原先是和父进程共享同一个数据,但是系统会检查你是否对子进程的数据修改,如果修改了,系统就会触发写时拷贝(往后细说),会把父进程的数据复制下来给子进程修改使用,这也使得子进程具有一定的独立性。

那我们为什么要创建子进程?:为了完成与父进程不一样的工作。

2,理解为什么一个函数会有两个返回值?

一般来说,我们写代码的时候函数return一次之后就会直接退出销毁,为什么fork函数却可以返回两次返回值?

通过上面的知识储备我们知道,fork会创建一个代码共享数据独立的子进程,也就是说在fork创建出一个子进程的时候,这时父进程和子进程会同时运行,并且通过拷贝,父子进程的代码段和数据也是暂时相同,但是我们知道,每个进程都会有自己的pid,父进程创建的子进程也不例外也有自己的pid,同时被cpu进行调度,所以父进程和子进程本质上就是一个代码相同,数据不同的两份程序或代码,本质上也是属于调用了两个函数,所以这就是为什么一个函数会有两个返回值的原因:

3,一个变量为什么会有两个不同的内容?

这个问题可以从前面的讲解中推导出来,在我们对子进程的数据进行写入修改的时候,系统会促发写时拷贝,让子进程的数据与父进程的数据相互独立,修改时互不影响,又因为父进程和子进程本质上就是两个同时运行的代码,所以可以实现一个变量两个不同内容。

4,fork函数究竟在干什么?

综上所述,fork函数的作用就是在运行的时候创建一个子进程,并返回子进程的pid,通过上面的讲解,我们可更深刻的认识到fork的作用与进程的理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值