Linux第十四章

🐶博主主页:@ᰔᩚ. 一怀明月ꦿ 

❤️‍🔥专栏系列:线性代数C初学者入门训练题解CC的使用文章「初学」C++linux

🔥座右铭:“不要等到什么都没有了,才下定决心去做”

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀

目录

僵尸状态(zombie)

孤儿进程

进程优先级 

top指令

top修改进程优先级

nice值的范围

进程的其他概念

时间片

电脑在没有联网的情况下关机之后,为什么电脑还能够正确的显示时间?

linux内核支持进程之间进行cpu资源抢占的!

cpu中的寄存器


僵尸状态(zombie)

僵尸进程是指已经终止执行但父进程尚未调用wait()waitpid()来获取其终止状态的进程。这种状态下,进程已经释放了所有的资源,但其进程描述符仍然存在于系统中,直到其父进程获取了其终止状态后才会被完全清除。

僵尸进程通常是由于父进程没有正确处理其子进程的终止状态而导致的。这可能是因为父进程已经退出,但没有释放其子进程的资源,或者是因为父进程忙于其他任务而没有及时处理子进程的终止状态。

你(一般指的是退出进程的父进程,一般父进程是bash,bash广义就是操作系统)怎么知道进程把任务完成的怎么样?

进程退出的时候,要有一些退出信息,表明自己把任务完成的怎么样!(例如,函数中的main函数结尾要return 0)

当一个进程在退出的时候,退出信息会由OS写入到当前退出进程的PCB中,可以允许进程的代码和数据空间释放,但是不能允许进程的pcb被立即释放!!

要让OS或者父进程,读取退出进程的退出信息,得知子进程退出的原因!

进程退出了,但是还没有被父进程或者OS读取,Os必须维护退出进程的pcb结构!!

此时,进程算退出了吗?退出了,因为在内存中代码和数据释放了

此时的状态:Z(zombie僵尸状态)

父进程或者OS读取之后,得知进程退出的原因,PCB状态先被改成X(dead死亡状态)状态,才会被释放

如果一个进程Z状态了,但是父进程就是不释放(回收)他,pcb就要一直存在

如果我们不及时释放他,可能造成内存泄漏

事例

[BCH@hcss-ecs-6176 10_12]$ cat proc.c
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
        pid_t id=fork();
        if(id<0)return 0;
        else if(id==0)
        {
                //子进程
                int cnt=5;
                while(cnt)
                {
                        printf("I am child, run times:%d\n",cnt--);
                        sleep(1);
                }
                printf("I am child,dead!:%d\n",cnt--);
                exit(2);
        }
        else
        {
                //父进程
                while(1)
                {
                        printf("I am father,running ang times!\n");
                        sleep(1);
                }
        }
        return 0;
}



[BCH@hcss-ecs-6176 10_12]$ ./myproc
I am father,running ang times!
I am child, run times:5
I am father,running ang times!
I am child, run times:4
I am father,running ang times!
I am child, run times:3
I am father,running ang times!
I am child, run times:2
I am father,running ang times!
I am child, run times:1
I am father,running ang times!
I am child,dead!:0
I am father,running ang times!
I am father,running ang times!

[BCH@hcss-ecs-6176 10_12]$ while :; do ps ajx | head -1&&ps ajx | grep myproc ;sleep 1;echo "##############"; done//每个两秒监视myproc的进程状态

 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
 3218  9935  9935  2439 pts/0     9935 S+    1000   0:00 .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值