Linux进程状态

Linux的进程状态可以分为下面的几种情况

static const char * const task_state_array[] = {
"R (running)", /* 0 */
"S (sleeping)", /* 1 */
"D (disk sleep)", /* 2 */
"T (stopped)", /* 4 */
"t (tracing stop)", /* 8 */
"X (dead)", /* 16 */
"Z (zombie)", /* 32 */
};
  • R(running):当进程正在被CPU执行,或已经准备就绪随时可由调度程序执行,则称该进程为处于运行状态(running)进程要么在运行中,要么在运行队列里面,并不一定是正在运行。

  • S(sleeping):等待某一事件的完成

  • D(disk sleep):磁盘休眠状态,这个进程通常是等待IO的结束

  • T(stopped):暂停状态,当进程收到信号SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU时就会进入暂停状态。可向其发送SIGCONT信号让进程转换到可运行状态。进程被暂停,我们可以使用指令kill -SIGSTOP 还有kill -SIGCONT 来是进程被暂停和被继续。

  • Z(zombie):僵死状态,当进程已停止运行,但其父进程还没有询问其状态时,则称该进程处于僵死状态。

下面提供了一段创建僵尸进程的例子

 #include<stdio.h>
 #include<stdlib.h>
 int main()
 {
   int id = fork();
   if(id > 0)
   {
     printf("Parent is sleeping....\n");
     sleep(5);
    }
    if(id == 0)
    {
       printf("son exit");
       exit(EXIT_SUCCESS);
     }
    return 0;
 }

程序执行的结果是,首先打印出了Parent is sleeping….,然后另换一行打印出son exit,接着持续了5秒钟之后程序退出。

我们在运行上面的程序的时候,我们可以打开终端,然后输入指令进行查看

ps -ax | grep myprocess

会发现我们进程处于僵尸状态

这里的子进程就是一个僵尸进程,可以这样理解,就是我们 的子进程已经退出了,但是子进程退出了之后无家可归,就是一个飘移的孤魂野鬼一样,所以这里是一个僵尸进程。

PS:
进程已死亡,但父进程没有收尸,该进程就成僵尸进程
僵尸进程不打开任何文件,几乎不占内存,但是占据进程表的资源,进程表记录pid、进程状态、CPU时间等
僵尸状态是每个子进程结束时必经的状态
系统监控中出现大量僵尸进程,应检查其父进程代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值