python进程
进程的概念
进程:进程是计算机中一次执行的过程
程序是一个静态文件的描述,不占用计算机的系统资源
进程是一个动态的过程,占有CPU内存等资源,有一定的生命周期
同一个程序的不同执行过程,即为不同的进程
问题1:什么决定了进程的创建
用户通过应用层程序进行进程的创建申请,----
调用操作系统接口进行进程创建。操作系统可以想象成一个大的软件
操作系统告知系统内核创建新的进程提供给应用层使用,
问题2:操作系统中有多少个进程
进程依赖于内存和CPU,CPU的核是有限的,每个进程都要使用内核,而一个内核同一时刻一次最多使用一个进程。
问题3:进程如何占用CPU
1。同一个内核同一时刻只能运行一个进程。
2。多个进程对内核资源进行抢占,由操作系统内核进行分配,优先级
3.哪个进程占用计算机内核,我们称为该进程占有CPU的时间片
问题4:进程在运行过程中的形态和附带内容
pcb :进程控制块儿。在Linux和Unix操作系统中,进程创建后会在内存中开辟一块空间存放进程的相关信息,这个空间称之为pcb
pid:在操作系统中进程的唯一标识,是一个大于0的整数。系统自动分配。是一个大于0的正整数。在Linux终端下,process 命令 ps -aux命令可以查看进程,通常pid是从小往大排列的。
CPU是负责计算机的运算的。有些程序不占用CPU,要看程序是不是要运算。
memory:
虚拟内存:memory。在系统中,每个进程占有4个G的内存地址空间,这里的内存指的是虚拟内存。电脑内存称之为物理内存,虚拟内存是采用交换分区等进行内存地址的扩展。
定义了很大的虚拟内存,但是其实物理内存没有那么多,采用映射的技术。执行原理如下,运行哪一块用哪一块儿,这样不用的抛弃,只把要运行的部分放到物理内存中。
进程状态
三态:就绪态,运行态,等待态。这三个状态有一定的关联。创建之后没有运行是就绪态,
运行sleep函数的时候就是等待态,等待某种条件才能执行,也称为阻塞状态。
五态:
新建态 终止态z
D不可中断
进程的优先级
优先级往往决定了一个进程的执行权限和占有系统资源的
top可以查看进程运行状况,动态监测,按q退出,NI指当前运行的优先级状态。Linux系统中-20----19 由高到低,用户创建进程默认优先级为0
man ps 可以查看ps的相关
nice:以指定的优先级运行某个进程。
chmod 777 while.py 睡3秒打印一次,大部分时间都在睡眠态,S+,第一次运行4206第二次就是4207了,
ps -aux: NI:显示优先级
命令:nice -9 ./while.py 以9的优先级来运行程序。
sudo nice --9 ./while.py当小于0的优先级的时候说明是root权限
运行一个程序有两个方法,第一种是指定解释器,python 3 while.py
如果给她一个权限
chomod 777 while.py
就可以./jwhile.py来运行程序,就可以从程序的第一行自动调用Python3解释器。
<>进行翻页查找。
renice n PID:修改一个正在运行的进程的优先级
renice 8 4277
父子进程:在系统中除了初始化进程之外,每个进程都是由父进程创建的,每个进程都有一个唯一的父进程,可能有多个子进程。
命令tree可以查看目录结构
命令pstree可以查看进程树
上午的课上完了,有一个问题
这个程序需要10秒才能运行完,如何才能6秒呢:?
当我们完成多个事情,如果这两个事情没有关联性的时候,可以并发来执行。当我们创建运行一个程序的时候。我们可以写两个程序完成上述问题,也可以自动创建进程来完成
fork创建子进程
实现方法:通过os.fork()函数来实现,这是系统函数。自己要学会分析函数。
功能:
运行到第7行的时候,子进程把父进程中的内存空间全部复制下来,从第7行开始,父子进程开始运行相同的内容。
fork函数会返回一个数值。所以上述程序打印了两遍。
终端,屏幕是共用的,父子进程都可以打印,所以我们看到了打印两句。为什么父子进程打印的不一样呢。在父进程中返回的是一个大于0的正整数,在子进程中=0的整数。虽然父子进程都执行这个函数,但是返回值不同。所以他们打印的东西不一样。这是系统设计接口的时候制定的规则,
父子进程是独立的,父子进程空间内容的修改不会相互影响。
父子进程在执行上互不影响,具体哪个先执行还不一定。
fork的返回值即为创建的子进程的PID号。