C语言多进程编程

本文详细介绍了C语言中的进程编程,包括进程的基本概念、创建进程的fork()函数及其返回值、注意事项、vfork()函数的区别以及通过具体例子解析进程的执行过程。通过深入理解,读者将能掌握如何在C语言中实现多进程操作。
摘要由CSDN通过智能技术生成

一、进程简介

1、进程是程序的执行。程序是静态的,进程是动态的。
2、进程在内存中有三部分组成:数据段、堆栈段和代码段。
代码段:就是存放程序代码的数据,如果有数个进程运行同一个一个程序,那么它们就可以使用同一个代码段(代码段是可以共享的);
堆栈段:存放的是子程序的返回地址、参数以及程序的局部变量,主要是保存进程的执行的环境,这里用到了栈先进后出的特性,可以看做具有记忆上一次执行的环境。
数据段:存放程序的全局变量 、常数
3、动态数据分配的数据空间
系统如果同时运行数个相同的程序,它们之间就不能使用同一个堆栈段和数据段,但是可以使用同一个代码段(代码段是可以共享的)
4、lwp:
线程ID。在用户态的命令(比如ps)中常用的显示方式。

二、创建进程fork()

1、头文件
#include<unistd.h>  
#include<sys/types.h>  
2、函数原型
pid_t fork( void);

pid_t 是一个宏定义

3、返回值

若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1

4、注意点

a、在Linux系统中创建进程有两种方式:一是由操作系统创建,二是由父进程创建进程(通常为子进程)。系统调用函数fork()是创建一个新进程的唯一方式,当然vfork()也可以创建进程,但是实际上其还是调用了fork()函数。fork()函数是Linux系统中一个比较特殊的函数,其一次调用会有两个返回值。

b、调用fork()之后,父进程与子进程的执行顺序是我们无法确定的(即调度进程使用CPU),意识到这一点极为重要,因为在一些设计不好的程序中会导致资源竞争,从而出现不可预知的问题。

c、fork产生子进程的表现就是它会返回2次,一次返回0,顺序执行下面的代码。这是子进程。一次返回子进程的pid,也顺序执行下面的代码,这是父进程。

d、进程创建成功之后,父进程以及子进程都从fork() 之后开始执行,只是pid不同。fork语句可以看成将程序切为A、B两个部分。(在fork()成功之后,子进程获取到了父进程的所有变量、环境变量、程序计数器的当前空间和值)。

e、一般来说,fork()成功之后,父进程与子进程的执行顺序是不确定的。这取决于内核所使用的调度算法,如果要求父子进程相互同步,则要求某种形式的进程间通信。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值