Linux:如何查询进程下的线程
本文最后更新于:2024年5月4日 凌晨
1、前言
进程和线程,是程序运行绕不开的话题,当我们想查询一个进程下存在哪些进程时,可以有哪些方法查询到,这是要思考的问题。
2、思路
2.1、是否有方法可查?
可想在linux中肯定有方法可以查询到进程下的线程,那么如何来查询?查询ps
手册,发现可以通过参数-T
查询到对应的进程下的线程:
1 |
|
当我们知道含线程的进程时哪一个进程的时候,可以使用-T参数通过PID来获取进程下的线程:
1 |
|
或者直接使用pgrep通过进程名匹配进程pid:
1 |
|
再通过进程pid即可查询到对应的线程:
1 |
|
2.2、合并命令行
通过前面的两个指令,成功查询到了进程下含有哪些线程后,那么我们能否将指令合并成1条来简化指令执行呢?这里就可以使用到awk和xargs来对指令执行的参数进行传递了,合并后的指令如下:
1 |
|
在这段指令中,无需知道进程pid,直接将其作为参数传递给ps -T -p
这一段指令,中间通过awk和xargs以及管道符|来传递参数。
分为下面三段:
1 |
|
注:当要查询的进程名存在多项时,会将所有的线程结果查询出来。
2.3、如何知道进程是否有线程?
通过上述的方法,能够成功的查询到指定进程下所含的线程,那么我们不知道对应进程全名,只是想知道哪些进程有线程时,如何来查询呢?linux中也提供了相应的指令来查询:
正常我们使用ps -ef
查询指令会展示所有进程的全格式列表下的内容,但扩展-L
参数一起使用时会增加NLWP(线程数)和LWP(线程ID)列:
1 |
|
通过这个指令可以查询所有的进程详情,并将线程详情打印:
当然,看到了这里,其实,还有第二种方法来查询指定进程名下的线程,没错,那就是将上面的指令结果通过grep来筛选:
1 |
|
到了这里,可以发现,ps -eLf | grep gvfsd
执行的结果和ps -ef | grep gvfsd | awk '{print $2}' | xargs ps -T -p
两种情况执行的结果差不多,无外乎,展示数据的多少,但是我们想查的数据都能够正确的获取到,具体使用哪种,全凭喜好。
3、总结
查询进程下的线程有两种方法:
3.1、方法一
awk
和xargs
方法传递参数查询:
1 |
|
3.2、方法二
ps
中-L
和-f
参数连用,增加打印线程信息:
1 |
|