Linux —— 进程状态

这篇具有很好参考价值的文章主要介绍了Linux —— 进程状态。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一,进程状态分类

二,僵尸进程

三,孤儿进程


一,进程状态分类

        进程状态反应进程执行过程中的变化,状态会随外界条件的变化而转换;

  • 三态模型,运行态、就绪态、阻塞态;
  • 五态模型,新建态、终止态、运行态、就绪态、阻塞态;

查看内核路径:..\linux-6.4.3\fs\proc\array.c

Linux —— 进程状态,操作系统,linux

  • R(running),运行状态;
    • 进程不一定在运行中,可在运行中或在运行队列;
  • S(sleeping,也可称可中断睡眠interruptible sleep),睡眠状态(浅度睡眠);
    • 进程在等待事件完成;可被再次唤醒;是一种等待状态;
  • D(disk sleep,也可称不可中断睡眠uninterruptible sleep),磁盘休眠状态(深度睡眠);
    • 通常会等待I/O的结束;且不可被杀死,即使是操作系统;是一种等待状态;
  • T(stopped),停止状态;
    • 可发送SIGSTOP信号停止进程,也在可发送SIGCONT恢复进程继续运行;
  • X(dead),死亡状态
    • 只是返回状态,不会在任务列表中看到;
//查看进程状态命令
ps aux / ps axj
[wz@192 ~]$ ps axj | head -1 && ps axj | grep bash$
  PPID    PID   PGID    SID TTY       TPGID STAT   UID   TIME COMMAND
  2906   2922   2922   2922 pts/0      2922 Ss+   1000   0:00 bash
  2906   2980   2980   2980 pts/1      3253 Ss    1000   0:00 bash

Linux —— 进程状态,操作系统,linux

//运行状态
  PPID    PID   PGID    SID TTY       TPGID STAT   UID   TIME COMMAND
  8090   8096   8090   2922 pts/0      8090 R+    1000   0:04 ./target
//浅度睡眠 S+前台运行
  PPID    PID   PGID    SID TTY       TPGID STAT   UID   TIME COMMAND
  8090   8096   8090   2922 pts/0      8090 S+    1000   0:02 ./target
//浅度睡眠 S后台运行(可命令后加&,使用kill退出)
  PPID    PID   PGID    SID TTY       TPGID STAT   UID   TIME COMMAND
  2922   8902   8902   2922 pts/0      2922 S     1000   0:02 ./target

[wz@192 Desktop]$ kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	
//暂停进程操作,19是暂停信号标签,13482进程PID
[wz@192 ~]$ kill -19 13482 
//暂停后会出现以下提示
[1]+  Stopped                 ./target
//唤醒进程操作,18是暂停信号标签,13482进程PID
[wz@192 ~]$ kill -19 13482 
//停止状态
  PPID    PID   PGID    SID TTY       TPGID STAT   UID   TIME COMMAND
  2922  13482  13482   2922 pts/0      2922 T     1000   0:14 ./target

Linux —— 进程状态,操作系统,linux

二,僵尸进程

        僵尸状态(zombie)是一个比较特殊的状态;进程已结束,但其父进程并没有及时回收其资源(如调用wait或waitpid等函数),形成“僵尸”状态;即当进程退出而父进程没有读取子进程退出的返回代码;

  • 僵死进程会以终止状态保持在进程列表中,且会一直在等待父进程读取退出状态代码;
  • 子进程退出,父进程还在运行,但父进程未读取子进程的状态,即子进程进入Z状态;
  • 进程退出状态会一直维持下去,一直处于Z状态;
  • 维护退出状态本身需数据维护(属进程基本信息,保存在task_struct);
#include <stdio.h>
#include <stdlib.h>

int main()
{
    pid_t id = fork();

    if(id < 0)
    {
        perror("fork");
        return 1;
    }
   else if(id > 0)    
   {    
       printf("farther[%d] is sleeping...\n", getpid());    
       sleep(30);    
   }    
   else    
   {    
       printf("child[%d] is begin Z...\n", getpid());    
       sleep(5);    
       exit(EXIT_SUCCESS);                                                           
   }    
   return 0;    
}  
//运行并监视
[wz@192 ~]$ while :; do ps aux | grep target | grep -Ev 'grep|pulseaudio'; sleep 1; echo
"###########"; done 
###########
wz         5766  0.0  0.0   4216   352 pts/0    S+   19:04   0:00 ./target
wz         5767  0.0  0.0      0     0 pts/0    Z+   19:04   0:00 [target] <defunct>

僵尸进程危害

  • 占用系统资源,会造成内存资源浪费,内存泄露;
  • 影响系统性能;
  • 安全漏洞;

避免僵尸文章来源地址https://www.toymoban.com/news/detail-571738.html

  • 及时回收;
  • 避免长时间运行;
  • 注册信号处理函数;

三,孤儿进程

  • 父进程提前退出,其子进程就会成为“孤儿进程”;
  • 孤儿进程会被1号init进程领养,由init进程回收;
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main()
{
    pid_t id = fork();

    if(id < 0)
    {
        perror("fork");
        return 1;
    }
    else if(id == 0)
    {
        printf("I am child, pid : %d\n", getpid());
        sleep(10);
    }
    else
    {
        printf("I am parent, pid: %d\n", getpid());
        sleep(3);
        exit(0);
    }
    return 0;
}
//运行并监视
[wz@192 ~]$ while :; do ps axj | head -1 && ps axj | grep target | grep -Ev 'grep|pulseaudio'; sleep 1; echo "###########"; done 
###########
  PPID    PID   PGID    SID TTY       TPGID STAT   UID   TIME COMMAND
  2922   6740   6740   2922 pts/0      6740 S+    1000   0:00 ./target
  6740   6741   6740   2922 pts/0      6740 S+    1000   0:00 ./target
###########
  PPID    PID   PGID    SID TTY       TPGID STAT   UID   TIME COMMAND
     1   6741   6740   2922 pts/0      2922 S     1000   0:00 ./target

到了这里,关于Linux —— 进程状态的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Linux操作系统篇:进程

    Linux操作系统篇:进程

    我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系 为什么计算机要采用冯诺依曼体系呢? 在计算机出现之前有很多人都提出过计算机体系结构,但最终选择冯诺依曼是因为用比较少的钱就可以做出效率不错的计算机 截至目前,我们

    2024年03月18日
    浏览(34)
  • Linux操作系统——第五章 进程信号

    Linux操作系统——第五章 进程信号

          目录 信号概念 用kill -l命令可以察看系统定义的信号列表 信号处理常见方式概览 产生信号 1. 通过终端按键产生信号 2. 调用系统函数向进程发信号 3. 由软件条件产生信号 4. 硬件异常产生信号 阻塞信号 1. 信号其他相关常见概念 2. 在内核中的表示 3. sigset_t 4. 信号集操作

    2024年02月11日
    浏览(12)
  • 操作系统课程设计-Linux 进程控制

    操作系统课程设计-Linux 进程控制

    目录 前言 1 实验题目 2 实验目的 3 实验内容 3.1 进程的创建 3.1.1 步骤 3.1.2 关键代码 3.2 子进程执行新任务 3.2.1 步骤 3.2.2 关键代码 4 实验结果与分析 4.1 进程的创建 4.2 子进程执行新任务 5 代码 5.1 进程的创建 5.2 子进程执行新任务          本实验为课设内容,博客内容为

    2024年01月18日
    浏览(14)
  • 【Linux】操作系统与进程的概念

    【Linux】操作系统与进程的概念

    目录 冯诺依曼体系 注意 为什么CPU不直接访问输入或输出设备? 跨主机间数据的传递 操作系统 管理 进程 描述进程 进程的查看和终止  bash 通过系统调用创建子进程 fork的辨析 🥖冯·诺依曼结构也称普林斯顿结构,是一种 将程序指令存储器和数据存储器合并在一起的存储器

    2024年01月18日
    浏览(12)
  • 【Linux操作系统】深入探索Linux进程:创建、共享与管理

    【Linux操作系统】深入探索Linux进程:创建、共享与管理

    进程的创建是Linux系统编程中的重要概念之一。在本节中,我们将介绍进程的创建、获取进程ID和父进程ID、进程共享、exec函数族、wait和waitpid等相关内容。 在Linux系统中,进程的创建使用 fork() 系统调用。 fork() 系统调用会创建一个与当前进程相同的子进程,子进程会复制父进

    2024年02月12日
    浏览(15)
  • Linux操作系统——第二章 进程控制

    Linux操作系统——第二章 进程控制

        目录 进程创建 fork函数初识 fork函数返回值 写时拷贝 fork常规用法 fork调用失败的原因 进程终止 进程退出场景 进程常见退出方法 _exit函数 exit函数 return退出 进程等待 进程等待必要性 进程等待的方法 wait方法 waitpid方法 获取子进程status 进程程序替换 替换原理 替换函数

    2024年02月08日
    浏览(13)
  • Linux操作系统-06-进程与服务管理

    Linux操作系统-06-进程与服务管理

    使用ps命令查看进程。包括过滤进程信息 使用systemctl命令管理和运行Linux服务 进程(Process):操作系统正在运行的应用程序。任意一个进程,都会消耗CPU和内存资源, 服务(Service):通过服务控制面板直接启动的应用程序,也可能是操作系统启动时自启动的后台应用程序。

    2024年03月12日
    浏览(12)
  • 【Linux】初步理解操作系统和进程概念

    【Linux】初步理解操作系统和进程概念

    操作系统是一款纯正的 “搞管理” 的文件 。 那操作系统为什么要管理文件? “管理” 又是什么? 它是怎么管理的? 1.操作系统帮助用户,管理好底层的软硬件资源; 2.为了给用户提供一个良好,安全的环境 即操作系统通过管理好底层的软硬件资源,为用户提供一个良好

    2024年02月15日
    浏览(9)
  • 【Linux】进程概念(冯诺依曼体系结构、操作系统、进程)-- 详解

    【Linux】进程概念(冯诺依曼体系结构、操作系统、进程)-- 详解

    1、概念 (1)什么是冯诺伊曼体系结构? 数学家冯·诺伊曼于 1946 年提出存储程序原理,把程序本身当作数据来对待,程序和该程序处理的数据用同样的方式储存。 冯·诺伊曼理论的要点是:计算机的数制采用二进制逻辑;计算机应该按照程序顺序执行。人们把冯·诺伊曼的

    2024年02月22日
    浏览(11)
  • 麒麟操作系统(Linux)使用和维护:进程相关的操作命令

    麒麟操作系统(Linux)使用和维护:进程相关的操作命令

      目录 1. 查看进程 2. top命令实时监控进程 3. 杀死进程 4. 图形界面查看和杀死进程         作为国产操作系统,无论是银河麒麟,还是中标麒麟,它们的服务器操作系统或者桌面操作系统,已经广泛应用于工业生产和科学研究领域。因为麒麟操作系统的内核是Linux系统内

    2024年02月04日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包