• 【Linux】进程概念 —— 孤儿进程与进程优先级


    一.孤儿进程

    子进程如果先于父进程退出,且父进程还没有检测到子进程的退出状态代码,此时我们称这个子进程为僵尸进程。那么,如果一个父进程先于子进程退出,很显然这个子进程将没有父进程,也就是说一定会成为僵尸进程,这就出现了严重的逻辑错误。

    所以,我们引出孤儿进程这一概念:

    当父进程先于子进程退出,那么OS会默认让1号进程Init领养该子进程,1号进程就变成了该子进程的父进程,此时这个子进程就被称为孤儿进程,子进程的检测与回收,都由这个1号进程来执行。

    注意一点:

    有1号进程Init领养的这个子进程(也就是孤儿进程)会由前台进程变成后台进程

    1. #include
    2. #include
    3. int main()
    4. {
    5. //手动写一个孤儿进程
    6. pid_t id = fork();
    7. if(id == 0)//让子进程循环起来,不退出
    8. {
    9. while(1)
    10. {
    11. printf("I am a Child Process\n");
    12. sleep(1);
    13. }
    14. }
    15. else if(id > 0)//让父进程运行一段时间后退出
    16. {
    17. int cnt = 5;
    18. while(cnt--)
    19. {
    20. printf("I am a Father Process:%d\n", cnt);
    21. sleep(1);
    22. }
    23. }
    24. return 0;
    25. }

    二.进程优先级

    概念:由于cpu资源有限,而系统中进程太多,就需要某种方式来竞争cpu资源

    本质:优先级就是在进程PCB(task_struct)中的某个属性(数字/数据)

    作用:优先级是调度器的主要参考依据,是重要的调度指标

    Linux中具体的优先级做法(PRI与NI​​​​​​​)

    PRI:代表进程的优先级:值越小优先级越高,越早被调度;值越大优先级越低,越晚被调度

    NI:nice值,优先级的修正数值,取值范围 -20~19,一共40个级别

    优先级 = 老的优先级(每次都是默认值80)+ nice值

    ​​​​​​​

    ps axj | head -1 && ps axj即可查看到所有进程的一些信息,里面有PRI与NI

    如何修改优先级(使用top指令)

    方法:

    1.输入top回车后,可以查看系统所有进程

    2.输入r,根据提示输入要修改的进程pid,回车

    3.输入nice值,之后系统会将进程的PRI+nice值得到修改后的PRI

    注意:

    每次修改PRI默认从80开始,不会从修改后的计数,如果NI超过-20~19这个范围,默认最大范围。

    举例:

    1.某进程PRI开始默认为80

    第一次修改:输入nice值-10,第一次修改后PRI:70;

    第二次修改:输入nice值10,第二次修改后PRI:90

    2.某进程PRI开始默认为80,修改:输入nice值为-100,修改后PRI:60

    某进程PRI开始默认为80,修改:输入nice值为100,修改后PRI:99

  • 相关阅读:
    mybatis笔记
    设计模式 --- 适配器模式 Adapter Pattern
    浅析Vite本地构建原理
    【数据结构】算法的时间复杂度和空间复杂度
    网络安全(黑客)自学
    火爆,接口测试+接口自动化测试整理总结,你不知道的都在这了...
    前端环境变量释义import.meta.env.xxx
    我用Python做了一个超级简单上手的中考成绩网页
    地面文物古迹保护方案,用科技为文物古迹撑起“智慧伞”
    J2EE基础-自定义MVC(中)
  • 原文地址:https://blog.csdn.net/Hello_World_213/article/details/126192644