在linux下查看某个进程下有哪些线程的方法

发表于 2017-04-13
更新于 2024-05-23
分类于 技术专栏
阅读量 6598
字数统计 2263

前言

在写浅析JS并发模型和事件循环这篇文章的时候,需要去核对nodejs进程下有哪些线程,于是总结了这篇文章,列举几个在linux下查看进程下有哪些线程的方法。顺便普及一下线程的含义:

线程在当代的操作系统中对并行执行的编程的一个抽象。当线程在一个进程中被创建出来之后,这些线程共享了很多资源(比如内存地址空间、打开的文件资源等),这样的话就很最小化forking的极限并且避免了昂贵的进程间通信操作。这些优点都让线程成为协程处理的一个高效的机制

在Linux中,在同一个进程中创建的线程(也可以成为轻量级进程(LWP))都有相同的“线程组ID”,该ID和进程的PID是一致的。每一个线程都有自己的线程ID(TID)。对于Linux的内核调度器来说,线程和标准的进程没有多大的区别。下面我们将列举几种方法来线程进程下的线程。

1、方法一

  1. 找到你想查找的进程ID(PID),比如这里我想查找nodejs,于是有: ps -ef | grep node,找到的PID如下:
  2. 使用这个PID去查找线程,命令有: ps -T -p 22222,线程列表如下:
root on frontlinguang in ~
$ ps -ef | grep node
root     16498  5877  0 19:07 pts/1    00:00:00 node
root     18020 23209  0 19:10 pts/4    00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn node
root on frontlinguang in ~
$ ps -T -p 16498
  PID  SPID TTY          TIME CMD
16498 16498 pts/1    00:00:00 node
16498 16502 pts/1    00:00:00 node
16498 16503 pts/1    00:00:00 V8 WorkerThread
16498 16504 pts/1    00:00:00 V8 WorkerThread
16498 16505 pts/1    00:00:00 V8 WorkerThread
16498 16506 pts/1    00:00:00 V8 WorkerThread
16498 16512 pts/1    00:00:00 node
16498 16513 pts/1    00:00:00 node
16498 16514 pts/1    00:00:00 node
16498 16515 pts/1    00:00:00 node

Tips:"-T" 选项是使能线程视图,The "SID" column represents thread IDs, and "CMD" column shows thread names.

2、方法二

用过linux的都会知道有个top命令,但是我们一般都只看到进程的实时数据,如果想看线程,那么可以加个-H选项,如图:

Tips:在Top的命令执行的时候,可以通过按H键来切换打开或者关闭线程视图。

如果只想看某个进程的线程实时数据,可以添加-p选项,后面跟上你想查看的进程ID,如图:

3、方法三

Linux中还有一个更加人性化的查看方式--htop命令。这是一个基于ncurse的交互式进程查看器。该程序允许你在树图中监控某个线程。

为了使能线程视图,执行完htop之后,按F2键进入设置菜单,如图:

选择"Display option",然后打开"Three view"和"Show custom thread names"选项,如图:

最后按F10保存退出。 现在就可以看到线程视图了:

公众号关注一波~

微信公众号

关于评论和留言

如果对本文 在linux下查看某个进程下有哪些线程的方法 的内容有疑问,请在下面的评论系统中留言,谢谢。

网站源码:linxiaowu66 · 豆米的博客

Follow:linxiaowu66 · Github