Linux进程状态 僵尸进程 孤儿进程

进程状态


  • R (running)

    • Linux 的运行状态(循环空语句)
  • S (sleeping)

    • 阻塞状态 称为浅度睡眠(可以被唤醒)
    • 死循环打印语句时
    • 等待输入时
    • 使用 sleep 函数时
  • D (disk sleep)

    • 也是一种阻塞状态,称为深度睡眠
    • 进程在等待磁盘写入完毕期间,这个进程不能被任何人杀掉,此时就处于深度睡眠。
    • 不响应任何操作系统的请求
  • T (stopped)

    • 暂停状态
    • kill -19 PID 暂停进程指令
    • kill -18 PID 继续进程指令
  • t (tracing stop)

  • X (dead)

    进程终止了

  • Z (zombie) 僵尸进程

    1. 僵尸进程是指子进程已经终止(停止运行),但其父进程尚未调用 wait() 或类似的系统调用来获取子进程的终止状态。在这种情况下,子进程的进程描述符仍然保留在系统中,但它实际上已经不再执行任何代码,也不占用资源。这个进程仅存在于进程表中,等待其父进程来获取其退出状态。这种状态称为"僵尸"状态。
    2. 所以,僵尸进程的关键在于子进程已经结束,但父进程还没有对它进行"善后"处理。如果父进程调用 wait()waitpid(),那么僵尸进程的资源就会被释放,真正从系统中消失。
    1. 当一个进程完成时,并不会立即进入 X(dead) 状态,会先进入 Z(zombie) 状态。
    2. 当一个进程(一个人)完成时,操作系统(警察)会继续维护该进程的信息,这个状态称为 Z(zombie) 状态。
    3. 一个进程结束了,但是它的父进程没有等待(调用 wait / waitpid)它, 那么它将变成一个僵尸进程;该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程。
    • 僵尸进程的危害
      • 一个父进程创建了很多子进程,但是不回收,就会造成内存资源的浪费。因为数据结构对象本身就要占内存。
      • 会造成内存泄漏

孤儿进程

  • 父子进程,父进程先退出,子进程的父进程会被改成 1 号进程(操作系统)。
  • 父进程是 1 号进程的进程称为孤儿进程
  • 该进程被系统领养。

进程优先级


基本概念

  • 是什么?

    优先级解决对于一个资源谁先访问谁后访问,用来决策当前进程是先享受还是后享受这个资源。

  • 为什么?

    • CPU 只有一个,进程有多个,注定进程之间要竞争资源,所以进程之间有竞争性。操作系统必须保证进程之间的良性竞争,必须确认优先级。
    • 如果进程长时间的不到 CPU 资源,该进程的代码长时间无法得到推进,就导致该进程的饥饿问题。(就相当于进程卡死了)
  • 怎么办?

查看进程优先级

ps -l:输出当前终端的进程
ps -al:输出所有终端窗口的进程

PRI 和 NI

  • PRI:优先级

    数字越小,优先级越高

  • NI:进程优先级的修正数据(nice 值)

    范围:[-20,19] (可修改的范围)

  • 真正优先级:PRI+NI(通过修改 NI 就可以修改优先级)

常见问题

  • kill -l

    输出 kill 的选项

  • 暂停状态和睡眠状态的区别

    睡眠状态一定在等待某种资源,而暂停状态就可能在等或者被某个进程所控制。

  • 什么情况下会使用暂停模式

    gdb 调试下会 t(tracing stop) 状态

  • 如何父进程先退出,子进程继续运行,会发生什么?

    1. 父子进程,父进程先退出,子进程的父进程会被改成 1 号进程(操作系统)。
    2. 父进程是 1 号进程的进程称为孤儿进程
    3. 该进程被系统领养。
  • 为什么操作系统要领养父进程已经停止的进程呢?

    因为父进程已经停止了,意味着未来没有进程再回收该子进程的资源了,所以必须把这个子进程托管给操作系统,让操作系统来释放回收资源。


相关推荐
wanhengidc19 分钟前
短视频运营行业该如何选择服务器?
运维·服务器
雨中rain33 分钟前
Linux -- 从抢票逻辑理解线程互斥
linux·运维·c++
-KamMinG44 分钟前
Centos7.9安装openldap+phpldapadmin+grafana配置LDAP登录最详细步骤 亲测100%能行
运维·grafana
锋风Fengfeng1 小时前
安卓15预置第三方apk时签名报错问题解决
android
Bessssss1 小时前
centos日志管理,xiao整理
linux·运维·centos
s_yellowfish1 小时前
Linux服务器pm2 运行chatgpt-on-wechat,搭建微信群ai机器人
linux·服务器·chatgpt
豆是浪个1 小时前
Linux(Centos 7.6)yum源配置
linux·运维·centos
vvw&1 小时前
如何在 Ubuntu 22.04 上安装 Ansible 教程
linux·运维·服务器·ubuntu·开源·ansible·devops
我一定会有钱1 小时前
【linux】NFS实验
linux·服务器
王铁柱子哟-1 小时前
解决 正在下载VS Code 服务器... 问题
运维·服务器