进程关系:父子进程

1. 创建子进程:fork函数

函数原型:
#include <unistd.h>
pid_t fork(void);
fork函数创建一个新的进程,即Child process
fork调用一次,却返回两次,分别代表父进程和子进程(初学者往往会有诸多疑问与猜想:为什么会这样?)

很多图书都在尝试解释“为什么fork返回两次的问题”,就笔者的经历来看:最有效的方法莫过于阅读早期的操作系统源代码,譬如《linux 源代码完全剖析》,赵炯著

  1. fork 举例
#include <iostream>
extern "C"
{
	#include <unistd.h>
}
using namespace std;

int main(void)
{
	pid_t child = 0;
	cout << "origin process" << endl;

	if(!(child = fork()))
	{
		/*child*/
		cout << "child process pid =" << child << endl;
	}
	else
	{
		/*father*/
		cout << "father process" << endl;
	}
	cout << "Both will excute here" << endl;

	return 0;

}

2. 父子进程:内存资源

现代操作系统将进程的虚拟内存通过一种叫做VM区段的技术进行管理。
一个区段与内存关联的属性有:

  1. 进程可读|可写|可执行
  2. 进程间共享或者进程私有

进程间共享的VM区段,父进程和子进程访问的是同一块内存
进程所私有的VM区段,父进程和子进程各自有自己的资源拷贝(通常是写时复制技术)

典型的私有VM区段,包括:
可执行文件 .data段 .bss段 Heap Stack
动态链接库 .so文件

3. 父子进程:打开的文件

        父进程打开的文件同样会在子进程中被打开,操作系统会在子进程创建时 将文件表项和v节点的引用计数加1
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值