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

Stateflow使用C语言结构体,关于使用Stateflow调用外部C代码的教程介绍

无论是Simulink仿真,还是对模型做代码生成,已有C代码的调用都是我们经常会遇到的情形:如何调用现有的外部C代码?很多人首先想到的是S-Function。的确,S-Function提供了一种途径,可以让我们把C函数封装成Simulink模块在Simulink环境下运行。另外还有一种方式,叫做Legacy Code Tool,说白了也是S-Function,只是MATLAB提供了这样的接口便于用...

weixin_34947914的博客 2673

聊一聊固态电池和钠离子电池新技术

总之,固态电池是一种“安全又高效的未来电池”,它的好处非常明显,但目前还处于研发阶段,离普及还有一段距离。未来,这两种技术可能会与锂离子电池并存,分别满足不同的市场需求。我尝试用最通俗易懂的语言将复杂的技术讲给大家听。钠离子电池和锂离子电池的工作原理很相似,但它用的是。固态电池和钠离子电池是两种正在研发和推广的。,它们有潜力解决现有锂离子电池的部分缺点。,而不是锂(Li)。

weixin_33324696的博客 3333

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

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

AnChenliang_1002的博客 2万+

ROBOGUIDE教程:FANUC机器人X型焊枪气动点焊焊接

FANUC机器人X型焊枪气动点焊焊接虚拟仿真实现方法。

IndRobSim 4386

Linux 查看进程创建的线程

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

谈谈1974 2198

基于YOLOv11的手术器械计数系统:从数据集构建到Web应用部署

m2cai16-tool数据集:包含15种腹腔镜手术器械的标注图像Cholec80数据集:包含80个胆囊切除手术视频,标注了7种器械SurgicalTools数据集:包含超过10,000张手术器械图像,涵盖21类常见器械手术剪(Scissors)止血钳(Hemostat)持针器(Needle Holder)手术刀(Scalpel)镊子(Forceps)拉钩(Retractor)吸引器(Suction)

YOLO 396

# YOLOv11-seg改进系列 | 引入CVPR MetaFormer的C3k2_PoolingFormerCGLU模块,池化Token混合+CGLU门控MLP

本文引入 CVPR 2022 论文(MetaFormer/PoolFormer)提出的 MetaFormer 元架构设计,以Pooling Token 混合器 + ConvolutionalGLU(CGLU)MLP构成,将其封装为,用于替换 YOLOv11-seg 的 C3k2 块。对比维度C3k2(基线)C3k2_PoolingFormerCGLU(本文)参数量(n scale)2.46M≈2.49M9.6≈9.69.7(+1.0%)架构范式单阶段卷积MetaFormer 双阶段。

qq_44224801的博客 845

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

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

青萍之末的博客 1033

uniapp(微信小程序) - 实现uniapp小程序电子签名板,横屏手写姓名签名专用写字画板,客户专用签字板,手写签名签字画板组件,手写签名,(详细运行示例,一键复制开箱即用)

uniapp实现微信小程序的电子签名效果,uniapp微信小程序 电子签名 写字板,用uniapp实现微信小程序的电子签名,uniapp微信小程序canvans实现手写签名,记录一个uniapp写的小程序的手写板,横屏,用于签名,unniapp实现电子签名,uniapp怎么做横屏的手写签名,uniapp如何实现签字板,uniapp小程序平台下怎么做电子签名板组件,uniapp电子签名插件,uniapp最好用的电子写字板插件组件源码,实现uniapp 手写签名功能,手写板、签字板,uni-app插件市场最好的

✅ 精选推荐文章 1万+

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

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

m0_56306892的博客 1014

STM32入门教程:人脸识别

STM32CubeMX配置 打开STM32CubeMX,创建一个新的工程,并选择你使用的STM32系列和具体型号。根据摄像头模块的规格,将摄像头的输出引脚连接到相应的STM32引脚上。人脸识别是一种非常常见的人工智能应用,它可以通过摄像头捕捉到的图像,识别出图像中的人脸并进行相关的分析和处理。在本教程中,我们将使用STM32开发板和相关传感器,通过指导你搭建一个基于STM32的简单人脸识别系统,并编写相应的代码来实现该功能。另外,为了达到更好的人脸识别效果,可能需要使用更高性能的处理器和更复杂的算法。

吃不胖. 374

java.sql.SQLIntegrityConstraintViolationException: #23000

java.sql.SQLIntegrityConstraintViolationException: #23000**异常信息****异常原因****解决方法** 异常信息 ### Cause: java.sql.SQLIntegrityConstraintViolationException: #23000 ; #23000; nested exception is java.sql.SQLIntegrityConstraintViolationException: #23000] with root c

123 4355

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

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

我的博客 935

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

kernel开发调试

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

zhaojie8324616的博客 307

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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、付费专栏及课程。

余额充值