线程是进程中用于多并发执行的共享资源(内存地址空间,打开的文件)执行,线程降低了fork的开销以及昂贵的进程间通许开销。在Linux上,线程thread也称为轻量级进程(Lightweight Processes(LWP)),是在进程中创建的,所以会和进程具有相同的进程ID(PID)。对于Linux内核调度器来说,线程和标准进程除了共享一些资源外没有差异。

默认情况下,pstop命令都只线程进程级别的信息。

通过ps检查线程

ps命令的-T参数可以激活线程视图,以下命令显示<pid>创建的所有线程:

ps -T -p <pid>

ps_thread.jpg

在显示输出中,PID列就是进程,SPID列就是线程

如果只需要获取线程tid,可以使用

ps -o ppid=<pid>

例如ps -o ppid=768就可以输出进程pid是768的所有进程和线程id。

还有一个神奇的-o ppid=使用方法,如果-o ppid=没有带参数,则会输出指定进程的父进程pid

ps -o ppid= 768

显示进程768的父进程pid,或者使用ps -f 768则可以完整显示进程命令,其中也包含了父进程PPID字段,则通过脚本可以截取字段。

参考 How do I get the parent process ID of a given child process?

  • 显示所有线程方法:
ps -efj
ps xao pid,ppid,pgid,sid,comm

通过top检查线程

top命令启动的时候,参数-H可以显示线程输出。在top的交互界面中,H按键可以切换线程进程视图。

H按键切换进程视图到线程视图时,可以看到top显示左上角Tasks(表示进程)转换成显示Threads(表示线程),并且数量倍数增加。

ps_thread.jpg

要检查某个进程<pid>对应的线程,可以使用

top -H -p <pid>

ps_thread.jpg

通过htop

htop是一个加强的进程观察工具。进入htop之后,按下<F2>可以进入设置菜单,选择Display option,并选择Three ViewShow custom thread names选项,然后按下<F10>推出设置。

ps_thread.jpg

然后就可以观察每个进程的线程

ps_thread.jpg

参考

results matching ""

    No results matching ""