linux c++ 多进程_Linux多进程编程入门(代码)

这篇博客介绍了Linux环境下使用C++进行多进程编程的基础知识,包括进程的概念、重要指令、父子进程及进程ID。深入讲解了fork和vfork函数创建子进程的方式,以及进程的正常和异常退出。还探讨了wait和waitpid函数如何回收子进程资源,以及exec系列函数用于替换进程内容的应用。
摘要由CSDN通过智能技术生成

befa611d3e7b95f2fd97affb933cf7e4.png

源自CSDN

CSDN-专业IT技术社区-登录​blog.csdn.net

一、基础知识

1.1、进程的概念

一个程序文件, 只是一堆待执行的代码和部分待处理的数据,它们只有被加载到内存中,然后让CPU逐条执行其代码,根据代码做出相应的动作,才形成一个真正“活的”、动态的进程(Process)

因此, 进程是一个动态变化的过程,是一出有始有终的戏,而程序文件只是这一系列动作的原始蓝本,是一个静态的剧本

  1. 进程就是程序在内存中动态执行的过程
  2. 进程是系统资源管理的最小的单位
  3. 进程是动态的概念,创建—运行--消亡
  4. 每个进程有4G独立的进程空间,其中0-3G是用户空间,3G-4G是内核空间。每个进程也有4G地址空间的,仅仅是地址空间,不是实际的内存,需要使用时,向系统申请
  5. 进程是独立可调度的任务,绝大多数的操作系统都支持多进程

1.2、多进程(任务)并行的实现

进程我们了解了,其实就可以说是一个后台运行的任务, 而多进程(多任务)并行就好比如我们的电脑可以上谷歌浏览器、微信、网易云音乐 ,它们都是一个个任务,在执行各自的功能, 看上去它们“同时”一起运行

但是实际上,对于一个单核CPU来讲,从宏观上是并行的,而从微观上是串行的,它使用时间片划分周期调用来实现,每个任务在一段时间内会分到一段时间片(占cpu的时间),在这段时间内该任务只能运行时间片长度,每个任务执行一点每个任务执行一点,从而达到“同时”的效果

而每个任务是如何调度和切换的? 这是由系统调度器来实现 , 所以使得任务有多种状态,如下

 就绪状态: 未占到CPU, 进程准备好了,等待系统调度器调度。
 运行状态: 占到CPU  , 已经开始运行。
 暂停状态: 没占,收到外部暂停信号,暂停运行 (不在参与任务调度)
 挂起(睡眠)状态: IO资源不满足, 导致进程睡眠。 (不在参与任务调度)(例如键盘输入)
 僵尸状态: 进程已经结束, 但是资源(内存、硬件接口)没有回收。

8550d71f5bdce7d9da76a6e4751d2683.png

就这样, 任务被切来切去, 我一点你一点(指的是cpu抢占时间),最后达到宏观上的并行运行​​

1.3、重要指令

(1) ps ——— 查看进程信息

    ps aux ——— 显示系统所有的进程
    ps -elf  ———   显示系统所有的进程(通用)

(2)top ————   动态查看进程信息

(3)pstree ———— 查看父子关系结构的进程

(4)kill -9 进程号   ———   杀死进程。(通过信号)

1.4、父子进程和进程ID

Linux中的进程都是由其它进程启动。如果进程a启动了进程b, 所以称a是b的父进程, b是a的子进程
Linux启动时,0进程启动1号进程(init )和2号进程(内核线程), 0号进程退出, 其它进程是由1、2直接或间接产生1号进程(init ) 所有用户进程的祖先2号进程(内核线程) 内核进程的祖先

进程号 PID (process ID)(类型pid_t , 什么什么_t 都是正整数) :
每个任务拥有唯一ID, 由操作系统管理和分配
每个进程创建会分配一个ID , 结束会取消一个ID
取消的那个ID会延时重复使用 , 但不会同时出现同一个ID
相关函数:

        函数getpid() 获取本进程的ID

        函数getppid() 获取父进程的ID (get perent pid)

(小彩蛋) 想让程序在后台运行执行指令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值