1. 什么是进程
进程,即执行中的程序
进程 = 程序+执行
在计算机中,每一个运行的exe程序,就是一个进程
2.为什么会有进程
早期,操作系统只有一个程序,这样效率是很低的。为了提高CPU的利用率,人们将多个程序加载到内存中并让他们并发运行,这其中的每一个运行的程序都可以被称作一个进程。
3.进程和线程的关系
线程被称为轻量级进程,他是操作系统调度的最小单元,通常一个进程可以拥有多个线程。线程和进程和线程的区别是进程拥有独立的空间,线程共享进程的资源空间。
举一个不太恰当的例子:
一个工厂中,工厂就是一个进程,而工厂中的每一个工人就是线程
4.进程的生命周期
5.进程标识
每一个进程会有一个名字,用来和其他进程做区分。这个名字成为PID(Process Identifier),比如在ubuntu下,输入命令ps -u
就可以看到每个进程的PID了,每次加载时,PID都会由系统分配一个,但是是唯一的
进程0和进程1
进程0是指Linux内核初始化阶段从无到有创建的一个内核线程,是所有进程的祖先,负责所有进程的轮转调度
进程1是原始父进程,也被称为init进程,负责托管孤儿进程
进程创建和终止相关的操作系统函数
- fock:创建进程使用
- exit:立刻结束进程,停止剩下的所有操作,清除包括PCB在内的各种数据结构,并终止本进程的运行。
- wait:会暂时停止目前进程的执行,直到有信号来到或子进程结束。如果在调用wait()时子进程已经结束,则wait()会立即返回子进程结束状态值。
僵尸进程和进程托孤
一个进程通过exit()系统调用终止之后,就处于僵尸状态,僵尸状态除了进程描述符依然保留外,进程的其他资源已经归还给内核。
孤儿进程:父进程先于子进程消亡,那么子进程就变成“孤儿”,进程,Linux内核就会把他“托孤”init进程,init进程就成了子进程的父进程。