Linux —— 进程状态

目录

一,进程状态分类

二,僵尸进程

三,孤儿进程


一,进程状态分类

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

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

查看内核路径:..\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.mfbz.cn/a/41736.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PageObject+Python+Appium

目录 前言&#xff1a; 简介 功能 常用目录 配置 实例 - 第一次启动 app 实例 - 登录 代码入口实例 结果展示 前言&#xff1a; Page Object模式是一种常用的设计模式&#xff0c;用于组织和管理自动化测试脚本中的页面对象。它将页面的元素和操作封装在一个独立的类…

skbuff.h在哪

今天看来下底层socket的实现&#xff0c;发现很多人都说有个skbuff结构&#xff0c;我就想着去找下这个&#xff0c; cat /include/linux/skbuff.h 结果找不到&#xff0c;查了下&#xff0c;需要下载内核源码 //Ubuntusudo apt install linux-headers-genericdpkg -S skbuff.…

浏览器显示ERR_NETWORK_ACCESS_DENIED,安全设置或防火墙可能正在阻止连接,无法上网

环境: Win10 专业版 HP台式机 问题描述: 浏览器显示ERR_NETWORK_ACCESS_DENIED,安全设置或防火墙可能正在阻止连接,无法上网 1.无线连接状态正常 打不开网站 2.可以ping通百度DNS解析正常 3.防火墙已关闭 这样的错误可能由于多种原因而发生 原因分析 1.防火墙/防…

Unity游戏源码分享-Third Person Controller - Shooter Template v1.3.1

Unity游戏源码分享-Third Person Controller - Shooter Template v1.3.1 功能非常齐全 AI格斗 2.5D 完整工程地址&#xff1a;https://download.csdn.net/download/Highning0007/88057824

SpringCloud学习路线(3)—— Eureka注册中心

一、导引 服务调用出现的问题 服务调用采取的请求地址是静态的&#xff0c;当我们使用服务集群时&#xff0c;很容易造成只能调用固定的微服务上的接口。多个提供者&#xff0c;消费者的使用对象无法确定消费者无法得知提供者的状态 二、Eureka注册中心 &#xff08;一&…

一个小技巧,分分钟搞定新零售!

新零售模式的兴起带来了线上线下销售渠道的整合&#xff0c;而自动售货机作为新零售模式的一种重要形式&#xff0c;提供了便捷的自助购物体验。 自动售货机作为新零售模式的一种典型应用&#xff0c;以其便利性、快捷性和24小时无人值守的特点&#xff0c;深受消费者和商家的青…

【C++】C++入门必备知识详细讲解

C入门必备知识 一、命名空间1. namespace2. namespace 的使用场景 二、了解 C 中的输入和输出三、缺省参数四、函数重载1. 函数重载的概念2. C支持函数重载的原理 五、引用1. 引用的概念2. 引用特性3. 常引用4. 引用的使用场景&#xff08;1&#xff09;做参数&#xff08;传引…

ES系列--打分机制

一、文档打分机制 当你通过关键字搜索相关文档时&#xff0c;可能会出现多个文档&#xff0c;这些文档的顺序是通过一个max_score属性的大小从高到低顺序展现出来的&#xff0c;max_score属性就是我们所说的评分。而这个评分是通过一个文档打分机制计算出来的。 二、打分原理 …

第二章 Android 基础--开发基础

文章目录 1.使用真机调试运行2.Android开发涉及的编程语言3.工程目录结构4.编译配置文件 build.gradle5.清单文件6.界面显示与逻辑处理7.Activity创建与跳转8.练习题 本专栏主要在B站学习视频&#xff1a; B站Android视频链接 本视频范围&#xff1a;P9—P16 工程结构、设计规…

DDOS百科:什么是 DDoS 攻击及如何防护DDOS攻击

一、什么是 DDoS 攻击&#xff1f; 当多台机器一起攻击一个目标&#xff0c;通过大量互联网流量淹没目标或其周围基础设施&#xff0c;从而破坏目标服务器、服务或网络的正常流量时&#xff0c;就会发生分布式拒绝服务(DDoS)攻击。 DDoS允许向目标发送指数级更多的请求&#…

什么是 XSS 攻击,攻击原理是什么

什么是 XSS 攻击&#xff1f; XSS&#xff08;Cross-Site Scripting&#xff09;攻击是一种常见的 Web 安全漏洞&#xff0c;其攻击目标是 Web 应用程序中的用户&#xff0c;攻击者通过在 Web 页面中植入恶意脚本&#xff0c;从而实现窃取用户敏感信息、篡改用户数据等目的。 …

一本通12951917:装箱问题

不知道说什么废话好了 题目 装箱问题 描述 有一个箱子容量为V&#xff08;正整数&#xff0c;0&#xff1c;&#xff1d;V&#xff1c;&#xff1d;20000&#xff09;&#xff0c;同时有n个物品&#xff08;0&#xff1c;n&#xff1c;&#xff1d;30)&#xff0c;每个物品…

安卓进程间通信浅谈

Case: /Users/lucas/AndroidStudioProjects/aidldemo-master 一&#xff1a;操作系统 从操作系统原理去看&#xff0c;进程通信主要有三个方法&#xff1a;共享存储、消息传递、管道通信。 二&#xff1a;安卓中的IPC 进程间通信的几种方式&#xff1a;Intent&#xff08;Bu…

华为产品测评官-开发者之声 - ModelArts 真实体验感想

华为产品测评官&#xff0d;开发者之声 - ModelArts 真实体验感想 我先是在6月17日参加了华为在深圳举办的开发者大会&#xff0c;后面看到群里发的"2023华为产品测评官&#xff0d;开发者之声"活动&#xff0c;简单看了一下体验活动的具体事情&#xff0c;感觉好玩…

超声医疗高压功率放大器ATA-4315技术参数

超声波检查或超声诊断&#xff0c;是一种非侵入性的医学检查方法&#xff0c;它利用了声波的高频振动来观察和评估人体内部的器官和组织。它基于不同密度和组织结构中传播的原理。通过将ultrasound(超声波)传递到身体的特定区域&#xff0c;并记录反射回来的声波&#xff0c;我…

flutter开发实战-svga播放svgaplayer_flutter直播礼物特效等效果使用

flutter开发实战-svga播放svgaplayer_flutter直播礼物特效等效果使用 最近开发过程中用到了SVGA进行播放动画&#xff0c;这里记录一下svgaplayer_flutter使用过程。svga可以做一些非常精美的动画&#xff0c;包括直播的刷礼物(火箭、跑车特效动画)等等。 效果图如下 一、SVG…

分区类型ID一键变身!快速改变分区类型ID的简单方法

分区类型ID是什么&#xff1f; 想要改变分区类型ID&#xff0c;先得明白分区类型ID是什么。大多数电脑用户可能只熟悉分区和分区类型&#xff0c;实际上有5种分区类型&#xff1a;主分区、可扩展固件接口&#xff08;EFI&#xff09;、扩展分区、逻辑分区和Microsoft保留分…

百分点科技苏萌受邀出席首届全国统计与数据科学联合会议

7月11-13日&#xff0c;首届全国统计与数据科学联合会议在北京举行&#xff0c;会议由中国现场统计研究会、中国数学会概率统计分 会、全国工业统计学教学研究会和中国商业统计学会联合主办&#xff0c;北京大学统计科学中心承办&#xff0c;旨在促进统计与数据科学领域发展&a…

vuecli5.x 配置图片输出为base64

解释&#xff1a;webpack的默认配置是小于一定的文件大小就要将图片转为base64, 所以尽量将这个阈值调大你的图片就可以转为base64; 当然这种做法不好, 会导致代码文件变大, 不过为了满足需求也没得办法。这年头大家都用 vite 了, 网上没有 vuecli5.x 这方面的记录, 写篇文章记…

Java经典面试解析:服务器卡顿、CPU飙升、接口负载剧增

01 线上服务器CPU飙升&#xff0c;如何定位到Java代码 解决这个问题的关键是要找到Java代码的位置。下面分享一下排查思路&#xff0c;以CentOS为例&#xff0c;总结为4步。 第1步&#xff0c;使用top命令找到占用CPU高的进程。 第2步&#xff0c;使用ps –mp命令找到进程下…