Linux进程id与状态

1.操作系统管理的理念

先描述再组织。

以我们创建的c程序为例,当我们运行写好的可执行程序时,系统会为其创建为一个结构体task_struct,结构体内包含了该可执行程序的属性,此时该程序便成为了一个进程(对应的代码数据 + 对应的PCB结构体)。进程在操作系统中都有一个户口,用于表示这个进程。这个户口操作系统被称为PCB(进程控制块),由于不止一个进程在系统中运行,所以需要一个进程管理器将大量的进程进行管理。

这就像我们上户口一样,我们带着我们的信息到派出所,派出所将我们的信息整理好写入系统中,然后给予我们身份证号。

2.进程id

系统中每个进程有唯一的id,在C语言中用pid_t类型表示,其实就是一个非负整数。

如何获取pid,命令如下。

方法1 : 只获取一次

ps ajx | head -1 && ps ajx | grep 进程的名字

方法2 : 持续获取pid(监视脚本)

while :;do ps ajx | head -1 && ps ajx | grep 进程的名字 | grep -v grep; echo"这里写上一些分隔符例如*******" ; sleep 3; done

3.进程的状态(state)

从系统层面讲进程状态有运行、阻塞、挂起等状态。

具体实现上,进程状态分为

源码解释
R (running)运行状态
S (sleeping)可中断睡眠状态
D (disk sleep)不可中断睡眠状态
T (stopped)暂停状态
t (stracing stop)调试暂停状态
Z (zombie)僵尸状态
X (dead)终止状态

  • 运行状态

cpu需要一个个将进程加载然后运行,所以需要一个进程队列来管理进程运行先后,进程处于这个运行队列,此时便是运行状态(所以运行状态的进程不一定在运行中,也可能在等待运行)

  • 可中断睡眠状态

当进程需要等待某种特定资源(例如从磁盘读取数据),便进入睡眠状态(有两种睡眠状态),处于可中断等待态的进程则可以被信号唤醒,如果收到信号,该进程就从等待状态进入可运行状态,并且加入到运行队列中,等待被调度

  • 不可中断睡眠状态

处于不可中断等待态的进程是因为硬件环境不能满足而等待,它任何情况下都不能被打断

  • 暂停状态(调试暂停状态)

此时的进程暂时停止运行来接受某种特殊处理。通常当进程接收到SIGSTOP、SIGTSTP、SIGTTIN或 SIGTTOU信号后就处于这种状态。例如,正接受调试的进程就处于这种状态.调试暂停状态也是是暂停状态。

  • 僵尸状态

子进程虽然已经终止,而父进程依旧在运行,终止进程的信息也还没有回收。顾名思义,处于该状态的进程就是死进程,这种进程实际上是系统中的垃圾,必须进行相应处理以释放其占用的资源。当父进程结束时,init 进程会很善良地把那些僵尸进程领养过来,并合理的回收它们的资源,那些僵尸进程就得到了妥善的处理了。

  • 终止状态

进程结束时,由系统回收资源,具有瞬时性,所以很难观察到。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值