今天去面试被问到冒泡排序的最好,最坏,平均时间复杂度;tcp有哪些窗口,拥塞的原因,TCP拥塞控制的思想;最后还问了linux下如何查看某个进程下所有线程的情况;进程和线程的区别;其实都没怎么答好,都看过想过,却没有实践并落到实处。这篇可以看作原创也可以看作转载,主要是自己记录一下。
问题: 我的程序在其内部创建并执行了多个线程,我怎样才能在该程序创建线程后监控其中单个线程?我想要看到带有它们名称的单个线程详细情况(如,CPU/内存使用率)。
线程是现代操作系统上进行并行执行的一个流行的编程方面的抽象概念。当一个程序内有多个线程被叉分出用以执行多个流时,这些线程就会在它们之间共享特定的资源(如,内存地址空间、打开的文件),以使叉分开销最小化,并避免大量高成本的IPC(进程间通信)通道。这些功能让线程在并发执行时成为一个高效的机制。
在Linux中,程序中创建的线程(也称为轻量级进程,LWP)会具有和程序的PID相同的“线程组ID”。然后,各个线程会获得其自身的线程ID(TID)。对于Linux内核调度器而言,线程不过是恰好共享特定资源的标准的进程而已。经典的命令行工具,如ps或top,都可以用来显示线程级别的信息,只是默认情况下它们显示进程级别的信息。
这里提供了在Linux上显示某个进程的线程的几种方式。
注:lwp LWP lwp (light weight process, or thread) ID of the lwp being reported. (alias spid, tid).就是说lwp spid tid都是指线程ID.
1.利用进程名获取进程号(以syslog为例)
ps -ef|grep syslog|grep -v "grep"|awk '{print $2}'
先看ps -ef|grep syslog的输出:(我没有打马赛克,千万不要攻击我的电脑啊)
2.利用进程号查看该进程下的线程
ps -eLf|grep 722|grep -v "grep" ,输出如下:
第四列就是线程号
ps -T -p 722,输出如下:(SPID即线程号)
3,利用top -H -p 722查看线程cpu利用率
第二行(Threads):总共4个线程,0个正在执行,4个睡眠,0个stopped, 0个zombie(僵尸),%CPU和%MEM即cpu占有率和内存占有率,其他字段含义参考top命令
4.pstree -p 722(树状图显示)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2018-03-14 多线程使用信号量sem_init,sem_wait,sem_post
2017-03-14 Websocket协议的学习、调研和实现
2017-03-14 HTTP协议建立连接、通讯与关闭连接全过程
2017-03-14 HTTP协议学习笔记---HTTP持久连接和如何正确地关闭HTTP连接
2017-03-14 linux route命令的使用详解
2016-03-14 WiFi基本知识 .
2013-03-14 Windows界面编程第七篇 文件拖拽(文件拖放)