一、什么是进程
程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
简单的说,进程就是一个正在进行的一个过程或者说一个任务,负责执行任务的人是CPU。
打个比方,我打开了QQ应用程序,然后跟我女朋友聊天,这就是一个进程。
二、进程与程序的区别
程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。
写代码,其实就是写程序,也就是说,程序仅仅是一大堆代码而已,而进程,指的是运行这段程序的运行过程。
另外,需要强调的是:同一个程序执行两次,那也是两个进程。
还是打开QQ聊天,虽然是同一个软件,但是可以开两个聊天窗口,一个跟女朋友聊天,一个跟老板汇报工作。
三、进程的创建
进程需要由操作系统创建,也就是说,只要有操作系统,就有进程的概念。
有一些操作系统只为一个应用程序设计,比如台灯中的控制器,打开台灯之后所有的进程就都已经存在了。
比较常见的还是通用系统,我们的笔记本、服务器都是通用系统,可以运行很多应用程序。
对于通用系统来说,需要有在系统运行过程中创建和销毁进程的能力。
操作系统创建进程有四种方式:
1.系统初始化
2.正在运行的进程开启子进程
3.用户请求交互而创建的新进程
4.批处理作业的初始化
新进程的创建都是由一个已存在的进程执行一个创建进程的程序而创建的。
在Windows系统中,操作系统调用CreatProcess处理进程的创建并把相应的程序读入新进程。
在UNIX系统中,操作系统调用fork,创建一个与父进程一模一样的副本。
父进程和子进程有各自不同的地址空间,任何一个进程在其地址空间中的修改不会影响到另外一个进程。
四、进程的终止
1.正常退出
自愿正常结束一个进程。
我在给老板汇报完工作之后,老板又给我布置了新的任务,而且说这个需求很着急,然我尽快完成,那我就得先跟女朋友说拜拜了,然后一点聊天页面的关闭按钮,这个进程就结束了。
2.出错退出
自愿创建一个进程但出现了一些问题。
老板请求控制我的电脑,要看我的代码演示效果,然后我打开终端,运行python3 text.py,但是我不小心把字打错了,应该运行的是test.py这个程序,text.py根本不存在,这时候就会报错并退出。
C:\Users\86188>python text.py
python: can't open file 'text.py': [Errno 2] No such file or directory
3.严重作错误
非自愿退出进程。
女朋友是一个算法小白,问我一道算法题,我一看她的错误信息:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
哦,这是因为把0作为了分母而导致程序退出,一看就是没有考虑边界情况。
4.被其它进程杀死
由于我一边跟女朋友聊天一边给老板演示,频繁的切换,再加上我电脑本来就开启了好多应用程序,QQ突然间卡死了,怎么点都没有用,没办法,启动任务管理器,结束进程,简单粗暴有效。
五、进程的层次结构
每个进程只有一个父进程。
在Windows系统中,所有的进程地位是相同的,但是在创建进程时,父进程获得一个标志,称为句柄,可以用来控制子进程,但是父进程有权把句柄传给其它子进程。
在UNIX系统中所有的进程都是以init进程为根组成树形结构。
六、进程的并发实现
进程的并发实现在于操作系统中断一个正在运行的进程,把此时进程运行的所有状态保存到操作系统维护的进程表中,该表存放了进程状态的重要信息:程序计数器、堆栈指针、内存分配状态、打开文件状态、账号和调度信息和其它所有在进程由运行态转为就绪态或阻塞态时必须保存的信息,以保证该进程再次启动时能够继续上一次的状态运行。