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

一.孤儿进程

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

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

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

注意一点:

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

#include<stdio.h>
#include<unistd.h>

int main()
{
  //手动写一个孤儿进程
  pid_t id = fork();
  if(id == 0)//让子进程循环起来,不退出
  {
    while(1)
    {
      printf("I am a Child Process\n");
      sleep(1);
    }
  }
  else if(id > 0)//让父进程运行一段时间后退出
  {
    int cnt = 5;
    while(cnt--)
    {
      printf("I am a Father Process:%d\n", cnt);
      sleep(1);
    }
  }
  return 0;
}

守护进程(精灵进程): 一种特殊的孤儿进程,运行在后台,脱离了与终端和主机会话的所有关系,默默的运行在后台.故进程结束不会成为僵尸进程,其父进程为init进程(1号进程)

二.进程优先级

概念:由于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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值