Linux多进程编程

 

1.进程相关概念

1.1程序和进程

进程(Process)的定义:

进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

进程一个启动的程序,进程占用系统资源。如:物理内存、CPU、终端等,是一个动态的概念。

在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;

在当代面向线程设计的计算机结构中,进程是线程的容器。

程序是指令、数据及其组织形式的描述,进程是程序的实体。程序是指编译好的二进制文件,存储在磁盘中,是一个静态的概念。


1.2进程的特征

主要特征:

  1. 动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
  2. 并发性:任何进程都可以同其他进程一起并发执行
  3. 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;
  4. 异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进
  5. 结构特征:进程由程序、数据和进程控制块三部分组成。

多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果;但是执行过程中,程序不能发生改变。

1.3进程的状态切换

进程的基本状态有5种,分别为初始态就绪态运行态挂起态终止态

其中初始态为进程准备阶段,常与就绪态结合来看。

1.4Linux下进程的结构

在Linux操作系统中,进程在内存里有三部分的数据,就是“数据段”、“堆栈段”和“代码段”。

代码段,顾名思义,就是存放了程序代码的数据,假如机器中有数个进程运行相同的一个程序,那么它们就可以使用同一个代码段。  
堆栈段存放的就是子程序的返回地址、子程序的参数以及程序的局部变量。

数据段则存放程序的全局变量,常数以及动态数据分配的数据空间(比如用malloc之类的函数取得的空间)。

2.创建进程

2.1fork函数

在Linux下产生新的进程的系统调用就是fork函数。fork是最难理解的概念之一:它执行一次却返回两个值。fork函数是Unix系统最杰出的成就之一,它是七十年代UNIX早期的开发者经过长期在理论和实践上的艰苦探索后取得的成果,一方面,它使操作系统在进程管理上付出了最小的代价,另一方面,又为程序员提供了一个简洁明了的多进程方法。与DOS和早期的Windows不同,Unix/Linux系统是真正实现多任务操作的系统,可以说,不使用多进程编程,就不能算是真正的Linux环境下编程。

  1. 函数作用:创建子进程
  2. 原型: pid_t fork(void);
  3. 函数参数:无
  4. 返回值:调用成功:父进程返回子进程的PID,子进程返回0;调用失败:返回-1,设置errno值。

 fork函数代码片段实例

Parent
int main()
{
	pid_t pid;
	char *message;
	int n;
	pid = fork()'
	if(pid <0){
		perror("fork failed");
		exit(1);
	}
	if(pid == 0)
	{
		message = "This is the child\n";
		n = 6;
	}
	else {
		message = "This is the parent\n";
		n = 3;
	}
	for(;n>0;n--){
		printf(message);
		sleep(1);
	}
	return 0;
}

fork函数总结

1.fork函数的返回值?

父进程返回子进程对的PID,是一个大于0的数。子进程返回0;

注意:不是fork函数在一个进程中返回2个值,而是在父子进程中各自返回一个值。

2.子进程创建成功后,代码的执行位置?

父进程执行到什么位置,子进程就从哪里执行。

3.如何区分子进程?

通过fork函数的返回值

4.父子进程的执行顺序

不一定,哪个进程抢到CPU,哪个进程就先执行。

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值