目录
X(dead) && Z(zombie)
僵尸进程 && 孤儿进程
进程的优先级
如何修改进程的优先级
我们至此还剩两种状态没有查看,X和Z状态。
X(dead) && Z(zombie)
X状态是进程死亡状态,Z状态依照这个词可知是进程处于僵死状态,就是离死亡不远的状态了。
如上如果要验证这两种状态,运行多线程会比较方便,创建test.c和所对应的makefile,旨在通过同时检测两个进程来得出这两种状态。
正常刚开始应该都是S+,然后我们我们等待子进程的倒计时自动结束之后子进程由于不再了就相当于自动退出了,这时只会观察到父进程而子进程进入退出状态。
为什么不是死亡状态或者T状态呢,因为如下。
这个子进程是被自动退出的而不是被停止的,如果要看到T状态需要直接kill子进程才会看到,为什么不是直接死亡呢,子进程自动退出时,会将执行结构告知操作系统和父进程,但是这个我们创建的父进程仅仅看着子进程退出却不做不接受任何操作,使得子进程无法将信息传答到父进程,结果就是子进程僵死,kill会直接将子进程杀死,我们也不建议直接将进程杀死。
那什么时候会出现X状态呢,子进程之所以没有进入X状态的原因是没有将要死的信息传入父进程,我们只需要先杀死父进程,让bush接管子进程,然后再杀死子进程就可以了。如下效果
理论是正确的,但是这个X状态很难看到,因为一个程序确定死亡只后就会直接被操作系统删除了。
僵尸进程 && 孤儿进程
僵尸进程就是处于将死边缘的进程就是状态为Z的进程,我们上面讲过了,由于处于僵尸进程的进程无法释放资源,所有僵尸进程的存在就会有内存泄漏的风险。
孤儿进程就是父进程不存在的子进程,这种进程没有父亲的约束本来应该也成为僵尸进程的,但是操作系统会担当起成为其父亲的责任,使其能够能够被回收。
bush的pid就是1。
依靠echo $?命令可以得知子进程的返回值。位于前台(状态没有+的)运行的程序或者被暂停后又重启的进程只能使用kill -19进行暂停,这也就是为什么上面那个图会多出两个T的原因。
进程的优先级
优先级的定义就是获得某种资源的先后顺序。
如上图可知,进程的优先级的相关知识。
我们手动调整进程后变化图如下:
进程的优先级就是从60到99这40个数字。
进程的优先级等于pri(先前的值) + ni(可修改值)
如何修改进程的优先级
修改进程的优先级就是在修改进程的ni的值,ni的值的可调整范围为[-20, 19],超过19或者低于-20的话会直接按最大值或者最小值处理,使用top指令就可以进行进程优先级的调整。
先说一下,ls带n选项的意思是数字化uid和gid,就是将拥有者,所属组和other数字化。
输入完top,然后按r键,再输入你要修改的进程的pid,之后再输入要修改的进程的ni值就可以了
切记操作系统不允许多次修改进程的优先级!!!