Linux查看某个进程的线程

#coding=utf-8
from flask import Flask
import os,time
import threading

app = Flask(__name__)

@app.route("/")
def login():
    return "test"
def wait_son(test):
    while True:
        print test

if __name__ == "__main__":
    path = os.path.abspath(__file__)
    dirname = os.path.dirname(path)

    if not os.environ.get('thread', None):
	with open("%s/mflask.pid"%dirname,'w') as f:
	    f.write(str(os.getpid()))
        #time.sleep(10)
    else:
        with open("%s/mflask_son.pid"%dirname, 'w') as f:
	    f.write(str(os.getpid()))
    #time.sleep(10)
    threading.Thread(target=wait_son, args=("test1",)).start()
    threading.Thread(target=wait_son, args=("test2",)).start()
    os.environ.update({'thread':"start"})
    app.run(debug=True, host="0.0.0.0", port=1009)

Linux查看某个进程的线程

有两个threading线程起了

flask两个进程是make_server fork出来的

Linux查看某个进程的线程

Linux查看某个进程的线程

 

线程是现代操作系统上进行并行执行的一个流行的编程方面的抽象概念。当一个程序内有多个线程被叉分出用以执行多个流时,这些线程就会在它们之间共享特定的资源(如,内存地址空间、打开的文件),以使叉分开销最小化,并避免大量高成本的IPC(进程间通信)通道。这些功能让线程在并发执行时成为一个高效的机制。

在Linux中,程序中创建的线程(也称为轻量级进程,LWP)会具有和程序的PID相同的“线程组ID”。然后,各个线程会获得其自身的线程ID(TID)。对于Linux内核调度器而言,线程不过是恰好共享特定资源的标准的进程而已。经典的命令行工具,如ps或top,都可以用来显示线程级别的信息,只是默认情况下它们显示进程级别的信息。

这里提供了在Linux上显示某个进程的线程的几种方式。

方法一:PS

在ps命令中,“-T”选项可以开启线程查看。下面的命令列出了由进程号为<pid>的进程创建的所有线程。

ps -T -p <pid>

Linux查看某个进程的线程

“SID”栏表示线程ID,而“CMD”栏则显示了线程名称。

方法二: Top

top命令可以实时显示各个线程情况。要在top输出中开启线程查看,请调用top命令的“-H”选项,该选项会列出所有Linux线程。在top运行时,你也可以通过按“H”键将线程查看模式切换为开或关。

top -H

Linux查看某个进程的线程

要让top输出某个特定进程<pid>并检查该进程内运行的线程状况:

top -H -p <pid>

Linux查看某个进程的线程

方法三: Htop

一个对用户更加友好的方式是,通过htop查看单个进程的线程,它是一个基于ncurses的交互进程查看器。该程序允许你在树状视图中监控单个独立线程。

要在htop中启用线程查看,请开启htop,然后按<F2>来进入htop的设置菜单。选择“设置”栏下面的“显示选项”,然后开启“树状视图”和“显示自定义线程名”选项。按<F10>退出设置。

Linux查看某个进程的线程

现在,你就会看到下面这样单个进程的线程视图。

Linux查看某个进程的线程

 

参考:

https://linux.cn/article-5633-1.html(以上内容转自此篇文章)

出处:https://www.cnblogs.com/EasonJim/p/8098217.html