当前位置: 首页 > article >正文

linux-------------进程概念(中)

1.进程状态

为了弄明⽩正在运⾏的进程是什么意思,我们需要知道进程的不同状态。⼀个进程可以有⼏个状
态(在Linux内核⾥,进程有时候也叫做任务)。
下⾯的状态在kernel源代码⾥定义:
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): 并不意味着进程⼀定在运⾏中,它表明进程要么是在运⾏中要么在运⾏
队列⾥。
S睡眠状态(sleeping): 意味着进程在等待事件完成(这⾥的睡眠有时候也叫做可中断睡眠
(interruptible sleep))。
D磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个
状态的进程通常会等待IO的结束。
T停⽌状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停⽌(T)进程。这个被暂停的
进程可以通过发送 SIGCONT 信号让进程继续运⾏。
X死亡状态(dead):这个状态只是⼀个返回状态,你不会在任务列表⾥看到这个状态。
1-1 进程状态查看
1.1.1ps 命令 静态查看进程
ps aux /ps axj

a:显示所有用户的进程

u:显示进程的详细状态(如 CPU、内存占用)

x:包括未连接终端的进程(如后台服务)

j:显⽰进程归属的进程组ID、会话ID、⽗进程ID,以及与作业控制相关的信息

常用组合

ps -ef | grep nginx  # 查找与 nginx 相关的进程
ps axj | grep 进程

1.2 僵尸进程

僵尸进程的概念:想象一下:一个进程已经“死亡”(执行结束),但它的“灵魂”(进程描述符)还留在系统中,等待“超度”(父进程回收资源)——这就是僵尸进程(Zombie Process)

  • 特征:进程状态为 Z(通过 ps/top 查看)。

  • 本质:内核保留其退出状态,直到父进程处理

大家想一下为什么会产生僵尸进程?

1.父进程未进行回收

在子进程结束的时候,父进程没有调用wait()或waitpid()读取其庄涛

2 父进程异常终止

在父进程异常终止的时候,子进程会被bash进程接管,但是他最后会回收子进程

僵尸进程有什么危害呢?

  • 资源占用:僵尸进程本身不消耗 CPU 和内存,但会占用进程表项

  • 潜在风险:若系统中僵尸进程过多(超过内核限制),可能导致无法创建新进程

大家想查看僵尸进程可以通过下面指令

ps aux | grep 'Z

1.3 孤儿进程

什么是孤儿进程呢?

想象一下:一个进程的父进程突然消失(比如崩溃或被终止),剩下子进程“孤苦伶仃”——这就是孤儿进程(Orphan Process)

  • 特征:子进程仍在运行,但父进程已终止。

  • 命运:孤儿进程会被系统“收养”,自动挂载到 init 进程(PID=1)名下,由系统接管生命周期。

孤儿进程是如何产生的呢?

  • 父进程代码中未等待子进程结束,直接调用 exit()

  • 示例代码(C语言):

  • #include <unistd.h>  
    int main() {  
        pid_t pid = fork();  
        if (pid == 0) {  
            sleep(10);  // 子进程睡眠时,父进程已退出  
            printf("我是孤儿进程!\n");  
        } else {  
            printf("父进程退出,不管孩子了!\n");  
            exit(0);  // 父进程直接退出  
        }  
        return 0;  
    }

    可以通过下面命令查看孤儿进程

  • ps -eo pid,ppid,stat,cmd | grep '^[ ]*[0-9]\+[ ]\+1 '  

    2.进程优先级

2.1.基本概念

cpu资源分配的先后顺序,就是指进程的优先权(priority)。
优先权⾼的进程有优先执⾏权利。配置进程优先权对多任务环境的linux很有⽤,可以改善系统性
能。
还可以把进程运⾏到指定的CPU上,这样⼀来,把不重要的进程安排到某个CPU,可以⼤ 改善
系统整体性能。
2.2.查看系统进程
在linux或者unix系统中,⽤ps ‒l命令则会类似输出以下⼏个内容:
UID : 代表执⾏者的⾝份
PID : 代表这个进程的代号
PPID :代表这个进程是由哪个进程发展衍⽣⽽来的,亦即⽗进程的代号
PRI :代表这个进程可被执⾏的优先级,其值越⼩越早被执⾏
NI :代表这个进程的nice值
2.3.PRI and NI
PRI也还是⽐较好理解的,即进程的优先级,或者通俗点说就是程序被CPU执⾏的先后顺序,此
值越⼩进程的优先级别越⾼
那NI呢?就是我们所要说的nice值了,其表⽰进程可被执⾏的优先级的修正数值
PRI值越⼩越快被执⾏,那么加⼊nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice
这样,当nice值为负值的时候,那么该程序将会优先级值将变⼩,即其优先级会变⾼,则其越快
被执⾏
所以,调整进程优先级,在Linux下,就是调整进程nice值
nice其取值范围是-20⾄19,⼀共40个级别。
2.4.PIR vs NI
需要强调⼀点的是,进程的nice值不是进程的优先级,他们不是⼀个概念,但是进程nice值会影
响到进程的优先级变化。
2.5.查看进程优先级的命令
⽤top命令更改已存在进程的nice:
top
进⼊top后按“r”‒>输⼊进程PID‒>输⼊nice值
注意:
其他调整优先级的命令:nice,renice
系统函数:

http://www.kler.cn/a/601488.html

相关文章:

  • ideaIU-2023.2.5.exe install (IntelliJ_IDEA_IU_2023.2.5)
  • 宝塔面板安装docker flarum失败,请先安装依赖应用: [‘mysql‘]:5/8
  • MongoDB不支持事务
  • 24、web前端开发之CSS3(一)
  • iPhone 16如何翻译文档?文档翻译技巧、软件推荐
  • 第五天 开始Unity Shader的学习之旅之Unity中的基础光照之漫反射光照模型
  • “thrust“ has no member “device“
  • OpenEMMA: 基于多模态大语言模型的端到端开源自动驾驶框架
  • linux如何释放内存缓存
  • WPS的PPT智能图形增加项目
  • 解锁PyPDF2:轻松驾驭PDF文件的Python库
  • dell 台式机 电脑 纽扣电池 如何取下?
  • SSE底层实现?SSE 和 websocket的区别?
  • WPF 浅述ToolTipService.ShowOnDisabled
  • 头歌实践教学平台--【数据库概论】--SQL
  • 微信小程序面试内容整理-如何优化小程序的启动速度?
  • HWHVV护网入门基础知识
  • VSCODE右下角切换环境没用
  • 高级java每日一道面试题-2025年3月10日-微服务篇[Eureka篇]-Eureka Server配置配置有哪些?
  • Jboss中间件常见漏洞