Linux —— 进程状态

news2024/9/22 1:43:32

目录

一,进程状态分类

二,僵尸进程

三,孤儿进程


一,进程状态分类

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

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

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

  • 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

//运行状态
  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

 

二,僵尸进程

        僵尸状态(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>

僵尸进程危害

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

避免僵尸

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

三,孤儿进程

  • 父进程提前退出,其子进程就会成为“孤儿进程”;
  • 孤儿进程会被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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/759539.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PyTorch: 权值初始化

文章和代码已经归档至【Github仓库&#xff1a;https://github.com/timerring/dive-into-AI 】或者公众号【AIShareLab】回复 pytorch教程 也可获取。 文章目录 Pytorch&#xff1a;权值初始化梯度消失与梯度爆炸 Xavier 方法与 Kaiming 方法Xavier 方法nn.init.calculate_gain…

Spark3新特性

Spark AQE 自适应查询优化&#xff1a; 实现运行时优化&#xff0c;纠正因统计信息不准确导致生成的逻辑计划不完善或有误的问题 动态调整JOIN策略&#xff1a;类似于mapjoin优化&#xff0c;将sortMergejoin转换成broadcasthashjoin&#xff0c;也就是将小表当作广播变量分发…

基于深度学习的高精度线路板瑕疵目标检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度线路板瑕疵目标检测系统可用于日常生活中来检测与定位线路板瑕疵目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的线路板瑕疵目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5…

SpringBoot+Vue实现的高校图书馆管理系统

项目描述&#xff1a;这是一个基于SpringBootVue框架开发的高校图书馆管理系统。首先&#xff0c;这是一个前后端分离的项目&#xff0c;代码简洁规范&#xff0c;注释说明详细&#xff0c;易于理解和学习。其次&#xff0c;这项目功能丰富&#xff0c;具有一个高校图书馆管理系…

外包软件定制开发中知识保护和安全性问题及解决方案

引言 外包软件定制开发在当今的商业环境中越来越普遍&#xff0c;它为企业提供了灵活性和成本效益。然而&#xff0c;与外包合作也带来了一些风险&#xff0c;其中最重要的就是知识保护和安全性问题。在外包软件定制开发过程中&#xff0c;共享敏感信息和知识产权是不可避免的…

redis基本操作

string数据类型的命令操作 设置键值 使用append 命令设置键值&#xff0c;后面跟键的名字&#xff0c;可以先判断该建是否存在&#xff0c;存在将值追加在后面&#xff0c;不存在自动添加该建 append mykey hello读取键值 get mykey数值类型自减1 数值类型自加1 查看值的…

记录C#知识点(二)21-40

目录 21.性能优化 22.动态dynamic使用 23.中文乱码 24.启动项目之前&#xff0c;执行文件 25.深拷贝-反射实现 26.丢弃运算符 _ 27.winform程序使用管理员运行 28.wpf程序使用管理员运行 21.性能优化 1.检查空字符串&#xff1a;使用string.Empty 2.更改类型转换&…

Java设计模式之行为型-访问者模式(UML类图+案例分析)

目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 五、总结 一、基础概念 访问者模式是一种对象行为型设计模式&#xff0c;它能够在不修改已有对象结构的前提下&#xff0c;为对象结构中的每个对象提供新的操作。 访问者模式的主要作用是把对元素对象的操作抽…

进程通信与信号

1.管道 匿名管道&#xff1a;匿名管道用于进程间通信&#xff0c;且仅限于本地父子进程之间的通信 管道符号 | 进程间通信的本质就是&#xff0c;让不同的进程看到同一份资源&#xff0c;使用匿名管道实现父子进程间通信的原理就是&#xff0c;让两个父子进程先看到同一份被打…

【云原生】Docker跨主机网络Overlay与Macvlan的区别

跨主机网络通信解决方案 docker原生的overlay和macvlan 第三方的flannel&#xff0c;weave&#xff0c;calico 1.overlay网络 在Docker中&#xff0c;Overlay网络是一种容器网络驱动程序&#xff0c;它允许在多个Docker主机上创建一个虚拟网络&#xff0c;使得容器可以通过这…

Python 最优传输工具箱(Python Optimal Transport)

最近在研究最优传输的相关理论&#xff0c;博主使用的是python编程语言&#xff0c;在这里给大家推荐一个Python最优传输工具箱&#xff1a;Python Optimal Transport&#xff08;pot)与geomloss 其中geomloss是针对pytorch张量的&#xff0c;ot是针对numpy数组的&#xff1b;g…

装饰器模式揭秘:我用装饰器给手机集成了ChatGPT

在平时的开发过程中&#xff0c;我们经常会遇到需要给一个类增加额外功能的需求&#xff0c;但又不想破坏类的原有结构。这时候&#xff0c;装饰器模式就能大显神威了&#xff01;接下来&#xff0c;我将带你深入了解装饰器模式的原理、优缺点、适用场景以及如何在实际开发中巧…

无法找到docker.sock

os环境&#xff1a;麒麟v10(申威) 问题描述&#xff1a; systemctl start docker 然后无法使用docker [rootnode2 ~]# systemctl restart docker [rootnode2 ~]# docker ps Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon r…

4、应用层https27

https协议加密流程&#xff1a;使用ssl加密。 一、HTTPS协议 对HTTP协议进行加密后的一个新的协议。 1、加密概念 单说数据加密过去狭义&#xff0c;更多的是防止数据被监听劫持。 加密包含俩个方面&#xff1a;身份验证&#xff0c;加密传输。 1.1身份验证 验证对端的身…

四、传播

文章目录 1、草药迷阵问题2、时序回溯搜索3、传播搜索THE END 1、草药迷阵问题 \qquad 有一个10*10的百草药柜&#xff0c;每一个抽屉里都有5种不同属性的草药&#xff0c;依次打开抽屉来长出草药迷阵&#xff0c;要求寻找一种神奇的药方&#xff0c;满足&#xff1a; 横行&am…

数据结构——C++无锁队列

数据结构——C无锁队列 贺志国 2023.7.11 上一篇博客给出了最简单的C数据结构——堆栈的几种无锁实现方法。队列的挑战与栈的有些不同&#xff0c;因为Push()和Pop()函数在队列中操作的不是同一个地方。因此同步的需求就不一样。需要保证对一端的修改是正确的&#xff0c;且对…

(中等)LeetCode 3. 无重复字符到的最长子串 Java

滑动窗口 以示例一为例&#xff0c;找出从每一个字符开始的&#xff0c;不包含重复字符的最长子串&#xff0c;那么&#xff0c;其中最长的那个字符串即为答案。 当我们一次递增地枚举子串的起始位置&#xff0c;会发现子串的结束位置也是递增的&#xff0c;原因在于&#xf…

Django项目创建

Django项目创建 文章目录 Django项目创建&#x1f468;‍&#x1f3eb;方式一&#xff1a;终端命令行方式&#x1f468;‍&#x1f52c;方式二&#xff1a;Pycharm创建 &#x1f468;‍&#x1f3eb;方式一&#xff1a;终端命令行方式 1️⃣cmd打开终端&#xff0c;切换到指定目…

WebSell管理工具--中国蚁剑安装教程以及初始化

简介&#xff1a;中国蚁剑是一款开源的跨平台WebShell网站管理工具 蚁剑的下载安装&#xff1a; GitHub项目地址&#xff1a;https://github.com/AntSwordProject/ Windows下载安装&#xff1a; 百度网盘下载链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1A5wK…