进程
操作系统发展史
操作系统的作用
对计算机硬件接口的复杂操作进行封装
串行
一个程序完完整整的运行结束后再执行下一个程序
多道技术
产生背景
针对单核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
转载于:https://www.cnblogs.com/marklijian/p/11575089.html