Linux进程与线程状态监测

Linux工具 - htop详解 阅读详情

问题

我的程序在其内部创建并执行了多个线程,我怎样才能在该程序创建线程后监控其中单个线程?我们想要看到带有它们名称的单个线程详细情况(如,CPU/内存使用率)。

Linux上显示某个进程的线程的几种方式

ps或top,都可以用来显示线程级别的信息,只是默认情况下它们显示进程级别的信息,我们需要添加相应的参数来设置。

ps命令

列出了由进程号为的进程创建的所有线程:

$ ps -T -p <pid>
  • ps命令中,“-T”选项可以开启线程查看。
  • SID栏表示线程ID,而CMD栏则显示了线程名称。

top 命令

top命令可以实时显示各个线程情况。要在top输出中开启线程查看,请调用top命令的“-H”选项,该选项会列出所有Linux线程。或者在top运行时,通过按“H”键将线程查看模式切换为开或关。

$ top -H

要让top输出某个特定进程并检查该进程内运行的线程状况:

$ top -H -p <pid>

在这里插入图片描述
在这里插入图片描述

htop命令

htop中启用线程查看的步骤:

  • 先开启htop,然后按< F2 >来进入htop的设置菜单。
  • 选择“设置”栏下面的“显示选项”,然后开启“树状视图”和“显示自定义线程名”选项。
  • 按< F10 >退出设置。

在这里插入图片描述

在这里插入图片描述
相关的进程状态说明:

  • R running or runnable (on run queue) 正在执行或者可执行,此时进程位于执行队列中。
  • D uninterruptible sleep (usually I/O) 不可中断阻塞,通常为 IO 阻塞。
  • S interruptible sleep (waiting for an event to complete) 可中断阻塞,此时进程正在等待某个事件完成。
  • Z zombie (terminated but not reaped by its parent) 僵死,进程已经终止但是尚未被其父进程获取信息。
  • T stopped (either by a job control signal or because it is being traced) 结束,进程既可以被作业控制信号结束,也可能是正在被追踪。

进程查看

ps 查看某个时间点的进程信息。

$ ps -l #查看自己的进程
$ ps aux #查看系统所有进程
$ ps aux | grep threadx #查看特定的进程

pstree 查看进程树。

$ pstree -A #查看所有进程树

在这里插入图片描述

端口占用进程

netstat -anp 查看端口占用情况。

$ netstat -anp | grep port #查看特定端口的进程

QAQ

Q:Linux下的线程与进程有什么区别?
用户级线程

  • 用户级线程内核的切换由用户态程序自己控制内核切换,不需要内核干涉,少了进出内核态的消耗,但不能很好的利用多核Cpu,目前Linux pthread大体是这么做的。

内核级线程

  • 切换由内核控制,当线程进行切换的时候,由用户态转化为内核态。切换完毕要从内核态返回用户态,被称为内核支持的线程或轻量级进程。

Q:孤儿进程和僵尸进程是什么?
孤儿进程:

  • 一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。
  • 孤儿进程将被 init 进程(进程号为 1)所收养,并由 init 进程对它们完成状态收集工作,,因此孤儿进程不会对系统造成危害。

僵尸进程:

  • 一个子进程的进程描述符在子进程退出时不会释放,只有当父进程通过 wait() 或 waitpid() 获取了子进程信息后才会释放。如果子进程退出,而父进程并没有调用 wait() 或 waitpid(),那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程。

  • 状态标识:僵尸进程通过 ps 命令显示出来的状态为 Z(zombie)。

  • 产生的问题:系统所能使用的进程号是有限的,如果产生大量僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程。

  • 解决办法:要消灭系统中大量的僵尸进程,只需要将其父进程杀死,此时僵尸进程就会变成孤儿进程,从而被 init 进程所收养,这样 init 进程就会释放所有的僵尸进程所占有的资源,从而结束僵尸进程。

线程

当一个程序内有多个线程被拆分出用以执行多个流时,这些线程就会在它们之间共享特定的资源(如,内存地址空间、打开的文件),以使拆分开销最小化,并避免大量高成本的IPC(进程间通信)通道。

线程与进程之间的ID

在Linux中,程序中创建的线程(也称为轻量级进程,LWP)会具有和程序的PID相同的“线程组ID”。然后,各个线程会获得其自身的线程ID(TID)。对于Linux内核调度器而言,线程不过是恰好共享特定资源的标准的进程而已。

参考资料

Linux上如何查看某个进程的线程
htop 命令详解
CS-Notes_Linux

linux-CPU分析 CPU使用率较低但负载较高,问题描述: Linux 系统没有业务程序运行,通过 top观察,类似如下图所示,CPU 很空闲,但是 load average 却非常高: 处理办法: load average 是对 CPU 负载的评估,其值越高,说明其任务队列越长,处于等待执行的任务越多。 出现此种情况时,可能是由于僵死进程导致的。可以通过指令 ps -axjf 查看是否存在 D 状态进程。 D ... 阅读详情

相关推荐

Linux进程管理三剑客:ps、kill、nice的协同诊断与治理

在Linux系统中,进程管理并非简单查杀调优,而是围绕进程生命周期展开的系统性工程。ps命令本质是进程状态快照工具,通过STAT列(如R/S/Z/T)揭示CPU占用、I/O阻塞或僵尸状态等核心线索;kill命令的核心价值在于信号语义分层——SIGTERM支持优雅终止,SIGSTOP用于无损调试,而滥用SIGKILL将破坏数据一致性;nice则通过CFS调度器的vruntime权重机制,实现CPU时间片的精细化配额分配,而非粗暴降速。这些能力共同构成故障定位(如高CPU根因分析)、服务治理(如微服务资源隔离)

weixin_30629653的博客 335

linux中用top、ps命令查看进程中的线程

在Linux上显示某个进程的线程的几种方式。   方法一:PS 在ps命令中,“-T”选项可以开启线程查看。下面的命令列出了由进程号为的进程创建的所有线程。 1.$ ps -T -p 方法二: Top top命令可以实时显示各个线程情况。要在top输出中开启线程查看,请调用top命令的“-H”选项,该选项会列出所有Linux线程。在top运行时,你也可

inuyashaw的博客 18万+

Linux系统下查看当前运行的进程和线程的几种方法

总结:top命令和ps经常被用于查看linux系统进程,但是也可以查看线程,top命令是通过top -H -p pid,而ps是通过ps -T -p pid查看,这些命令常被用于排查性能问题,比较常用,需要花点时间掌握。如果为了查看更加直观,可以使用htop,htop是默认不安装,可以进行自行安装。

小秋 AI SLAM 入门实战教程 2954

Linux上如何查看某个进程的线程

文章出处:https://linux.cn/article-5633-1.html 问题: 我的程序在其内部创建并执行了多个线程,我怎样才能在该程序创建线程后监控其中单个线程?我想要看到带有它们名称的单个线程详细情况(如,CPU/内存使用率)。 线程是现代操作系统上进行并行执行的一个流行的编程方面的抽象概念。当一个程序内有多个线程被叉分出用以执行多个流时,这些线程就会在它们

韦编二绝 4148

Mamba再封神!与YOLO结合,拿下二区!好发不卷!

相比传统的YOLO改进,Mamba是新技术,两者结合尚在蓝海阶段,可发挥空间大!更为关键的是,它在检测精度和速度方面,都让以往的YOLO模型难以望其项背!比如代表模型Mamba YOLO,便在参数减少45.5%、FLOPs减少50%的同时,精度还比YOLOv8高6.1%!这主要得益于,Mamba能够捕捉长期依赖关系,而YOLO则擅长捕捉局部特征,两者能够优势互补,且Mamba线性复杂度的特性,也有利于提高计算效率!为了让大家能够紧跟前沿发展,找到更多灵感启发,我给大家10种。

2401_88190197的博客 2506

基于大疆TSDK与Pix4D的热红外数据工程化处理:从RJPG到温度正射影像的完整工作流

本文详细介绍了基于大疆TSDK与Pix4D的热红外数据工程化处理完整工作流。通过Python脚本自动化解析RJPG格式的热红外图像,提取并转换其中的原始辐射数据为包含真实温度信息的TIFF文件,再结合Pix4Dmapper进行批量拼接,最终生成可直接用于GIS分析的温度正射影像图。该流程解决了手动处理效率低下、参数校准复杂等难题,实现了从原始数据到定量分析成果的高效、准确、可重复生产。

weixin_29161785的博客 377

linux下查看某进程内有多少个线程的方法(ps、top、Htop)

大家可能对top监控软件比较熟悉,但是htop,可以称之为top的增强版,相比top其有着很多自身的优势。具体使用方法可以自行搜索一下,这里就不详细阐述了,了解一下知道有这个方法即可。运行结果如下,PIDWie进程号,SPID为线程号,CMD为线程名称。可以看到PID为362839。此时就可以查看该进程内有多少个线程了。

AnChenliang_1002的博客 2万+

原理图转PCB

本文讲述了原理图的编译、原理图转PCB的步骤和易错点。

m0_58083051的博客 3290

Linux 查看进程创建的线程

文章目录前言1. ps 命令2. top 命令 前言 最近检查线上服务器状态,发现有几台机器内存占用很高。远程登录后,查看各个进程的内存占用情况,发现其中一个 Java 进程的内存占用很高,其启动命令指定了最大的堆内存为 128M,但是整个进程占用的内存却有 550M,查看其线程,发现这个进程开了3000个线程,简直惊了。 后事暂按不表,此处记录 Linux 命令下查看进程创建的线程的相关命令 1...

谈谈1974 2198

【5G】5G 核心网(5GC)基本架构

本文旨在科普5G核心网相关知识...

Learning makes me happy (0^◇^0) 4万+

笔记本电脑更换主板后出现2203:System configuration is invalid,以及2201、2202系统错误的解决

主板更换后刷新S/N

晓夏IT笔记 3519

Linux系统编程中重要的工具和命令

一、硬盘和内存相关指令 (1)df   df命令作用是列出文件系统的整体磁盘空间使用情况。可以用来查看磁盘已被使用多少空间和还剩余多少空间。 // 命令参数: df -a:--all,显示所有的文件系统,包括虚拟文件系统。 df -B:--block-size,指定单位大小。比如1k,1m等。 df -h:--human-readable,以人们易读的GB、MB、KB等格式显示。 df -...

青萍之末的博客 1033

彻底解决tplink路由器无法访问部分https网站

彻底解决tplink无法访问部分https网站

renkai721的专栏 8765

Linux 系统检测进程死锁的方法

psstrace用于分析进程状态和系统调用卡住的位置。lsof用于检查文件或资源锁。pstackgdb用于分析线程堆栈,判断是否多个线程卡在锁等待上。proc文件系统()可用于检查futex死锁。perflockstat用于更深入分析锁争用情况。dmesg可用于检查内核是否检测到死锁。你可以结合这些方法,具体看进程是否真的发生了死锁。

m0_56306892的博客 1014

多模态大模型:技术原理与实战 全球多模态大模型介绍

关键词:多模态大模型、深度学习、计算机视觉、自然语言处理、跨模态学习、迁移学习、人工智能随着人工智能技术的飞速发展,多模态大模型已经成为了当前AI领域最热门的研究方向之一。多模态大模型能够同时处理和理解多种类型的数据,如文本、图像、音频和视频等,这为AI系统在复杂场景下的应用提供了更加强大和灵活的能力。本文将深入探讨多模态大模型的技术原理,介绍其实战应用,并对全球主要的多模态大模型进行全面的介绍和比较。

AI天才研究院 4268

【AI智能体】Coze 数据库从使用到实战操作详解

Coze 数据库使用到实战详解

congge 5915

Linux常用性能监测工具参数说明

💡 Tip:Linux负载不是百分比,是排队的进程数,值越大表示系统压力越大。,如果长期存在僵尸进程,说明父进程未处理子进程退出。⚠️ RES - SHR ≈ 进程实际占用的物理内存。最常用来在操作系统层面定位线程,例如用。,尤其是高 CPU 或死锁分析时。高 CPU、死锁、线程卡顿排查时,+ 堆栈信息是最直接证据。≈ CPU 实际使用率,(十六进制需转为十进制)。查看 CPU 占用。

我的博客 935

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

linux获取性能状态命令

10. execsnoop、exitsnoop监测线程进程启动退出。1. vmstat 监测内存、缓存、io、system、cpu。2. mpstat 监测cpu负载、各个cpu核心使用情况。11. cpudist 线程唤醒后在cpu执行的直方图。9. top、htop、ps监测cpu内存。7. lsof 监测进程占用cpu的情况。8. sar -P All 历史记录统计。6. perf命令执行期间的分支预测。3. stress 模拟cpu负载。5. iostat监测io负载。4. fio模拟io负载。

wangjunfeng0000的专栏 171

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

kernel开发调试

soft lockup和hard lockup介绍 主体主要涉及kernel线程、时钟中断、NMI中断。 优先级:kernel线程&lt;时钟中断&lt;NMI中断 soft lockup和hard lockup主要调试以下问题: 抢占被长时间关闭而导致进程无法调度(soft lockup) 中断被长时间关闭而导致的问题 (hard lockup) R状态死锁监测 R状态死锁是指某一任务一直处于T...

zhaojie8324616的博客 307

Linux基本命令总结

目录 1、文件管理: 2、权限管理 3、进程管理 4、系统管理 5、用户管理命令 6、网络通讯 7、关机/重启 8、文件压缩 9、线程操作: 10、gdb调试 补充: 1、文件管理: cd +路径 改变当前工作目录 路径可以为绝对路径或者相对路径 ls 显示当前目录下的文件 touch 新建普通文件 rm 删除普通文...

Bonjour2017的博客 416

多线程实验及top拓展

多线程实验及top拓展知识

qq_53092426的博客 385

linux有用命令

空中的鱼 165

java常用命令

java常用命令

qq_19379247的博客 149

面试中常遇到的Linux命令总结

1.文 件操作: More :一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比 less:和more相似,但是使用more无法向前翻页,只能向后翻,而less可以任意切换 head :用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行 tail :把某个档案文件的最后几行显示到终端上 cat :显示整个文件的内容 ...

CGL1552188038的博客 392

测试常用Linux监控命令

Linux最常用的应用服务器,性能测试常用命令如下: 操作系统 CPU 内存 网络 IO及磁盘 进程和线程 句柄 其它

一口Linux的专栏 304

第四章 Linux套接字通信:7. IO多路转接(复用)

IO多路转接也称为IO多路复用,它是一种网络通信的手段(机制),通过这种方式可以同时监测多个文件描述符并且这个过程是阻塞的,一旦检测到有文件描述符就绪( 可以读数据或者可以写数据)程序的阻塞就会被解除,之后就可以基于这些(一个或多个)就绪的文件描述符进行通信了

qq_62848032的博客 673
上一篇: Linux后台运行程序的方法总结
下一篇: Linux存储性能观测——vmstat命令详解
工程师小星星
博客等级 码龄10年 268粉丝 96原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值