进程的概念
Posted marklijian
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程的概念相关的知识,希望对你有一定的参考价值。
进程
操作系统发展史
操作系统的作用
- 对计算机硬件接口的复杂操作进行封装
串行
- 一个程序完完整整的运行结束后再执行下一个程序
多道技术
- 产生背景
- 针对单核CPU,实现并发
- 空间上的复用
- 各自程序所运行的内存空间是隔离的
- 无法对其他程序进行干扰
- 时间上的复用
- 复用CPU上的时间片
- 对CPU的利用率有了很大的提高
并发
- 虚假的同时运行
- 实际上是对单个CPU的利用
- 因为一个进程在运行时不可能一直用到CPU的所有资源
- 操作系统对CPU的资源进行调度
- 多个程序在使用CPU,但并不是在同一时刻运行
- 只要在不同程序中切换的够快,
就看起来像是多个程序同时运行了
- 程序对CPU的占用切换
- 程序进入阻塞态
- 该程序分配的时间片到了
- 优先级更高的进程执行了
并行
- 基于多核CPU,完成了真正上的同一时刻上运行多个程序
现在的CPU
- 多核cpu
- 每个核心上都使用了多道技术
ps:一个核心是做不到同一时刻完成两件事的
进程的概念
进程即正在执行的一个过程。
进程是对正在运行程序的一个抽象。
- 单核+多道,实现多个进程的并发执行
进程和程序的区别
- 进程:
- 正常运行的程序
- 需要一些数据
- 可以得到一些结果
- 程序:
- 单纯的一些文件,仅仅是一些代码,
不运行将一点意义都没有
- 单纯的一些文件,仅仅是一些代码,
进程的创建
- 首先,知道进程肯定是操作系统来创建的
- 系统初始化
- 查看进程linux中用ps命令,windows中用任务管理器,前台进程负责与用户交互,后台运行的进程与用户无关,运行在后台并且只在需要时才唤醒的进程,称为守护进程,如电子邮件、web页面、新闻、打印
- 一个进程在运行过程中开启了子进程
- 如nginx开启多进程,os.fork,subprocess.Popen等
- 用户的交互式请求,而创建一个新进程
- 如用户双击暴风影音
- 一个批处理作业的初始化
- 只在大型机的批处理系统中应用
- 新进程的创建都是由一个已经存在的进程执行了一个
用于创建进程的系统调用而创建的
不同操作系统中对进程的创建
- 在UNIX中该系统调用是:fork
- fork会创建一个与父进程一模一样的副本,二者有相同的存储映像、同样的环境字符串和同样的打开文件
- 在shell解释器进程中,执行一个命令就会创建一个子进程
- 在windows中该系统调用是:CreateProcess
- CreateProcess既处理进程的创建,也负责把正确的程序装入新进程。
进程的状态
运行态
- 进程占用处理器资源
- 处于此状态的进程的数目小于等于处理器的数目
阻塞态
- 由于进程等待某种条件(如I/O操作或进程同步)
- 在条件满足之前无法继续执行
- 该事件发生前即使把处理器资源分配给该进程,也无法运行
就绪态
- 进程已获得除处理器外的所需资源,等待分配处理器资源,只要分配了处理器进程就可执行
- 就绪进程可以按多个优先级来划分队列
进程的退出
自愿
- 正常退出
- 用户点击交互式页面的叉号
- 程序执行完毕调用发起系统调用正常退出
- 在linux中用exit
- 在windows中用ExitProcess
- 出错退出
- python a.py中a.py不存在
非自愿
- 被其他进程杀死
- 执行非法指令
- 严重错误
- 如kill -9
mutiprocess
开启子进程的方式一
- 使用函数
- Process(target = 函数名, args = ([参数1,[参数2,]])
开启子进程的方式二
- 使用类
- class A(Process):
A().start()
僵尸进程和孤儿进程
僵尸进程
- 程序执行完但是pid和运行时的状态还存在
- 死而不僵
孤儿进程
- 父进程死了,子进程还活着
三种情况
- 父进程等着所有的子进程都运行结束,进行同一的资源回收
- 无害
- 父进程死了,子进程将由init进程接管并回收
- 无害
- 父进程一直不死,开辟了大量的子进程,占用了大量的pid
- 有害
- 解决方案:杀死父进程
XMind: ZEN - Trial Version
以上是关于进程的概念的主要内容,如果未能解决你的问题,请参考以下文章