在linux下用 top -H -p <pid> 查询某个进程的线程
按理说,都是某个进程下的线程, 应该进程id PID一样啊,但实际却都不一样
在linux下用 top -H -p <pid> 查询某个进程的线程
按理说,都是某个进程下的线程, 应该进程id PID一样啊,但实际却都不一样
比如查看多线程应用MySQL的线程:
ps -efL|head -n1 && ps -efL|grep mysqld
UID PID PPID LWP C NLWP STIME TTY TIME CMD
mysql 9333 1 9333 1 6 13:30 ? 00:00:00 /usr/sbin/mysqld
mysql 9333 1 9345 0 6 13:30 ? 00:00:00 /usr/sbin/mysqld
mysql 9333 1 9346 0 6 13:30 ? 00:00:00 /usr/sbin/mysqld
mysql 9333 1 9347 0 6 13:30 ? 00:00:00 /usr/sbin/mysqld
mysql 9333 1 9348 0 6 13:30 ? 00:00:00 /usr/sbin/mysqld
mysql 9333 1 9348 0 6 13:30 ? 00:00:00 /usr/sbin/mysqld
可见线程的PID都是一样的,其中NLWP表示线程组中线程的个数,主线程的PID号等于自身的线程编号LWP.
top -H -p `pidof mysqld` -n1
top里看到的线程PID其实是ps里的线程编号LWP.
楼上说的linux线程和进程是一样的,这个说法是错误的。
看了楼主的问题,感觉楼主是被PID给弄混了,线程进程都会有自己的ID,这个ID就叫做PID,PID是不特指进程ID,线程ID也可以叫做PID。
引用原文
关于线程继承关系图如下:
在这里你可以清晰的看到,创建一个新的进程会给一个新的PID和TGID,并且2个值相同,
当创建一个新的线程的时候,会给你一个新的PID,并且TGID和之前开始的进程一致。
楼主按下H,切换到进程视图,会发现只剩下一个了
建议建议楼主不要被名字PID给迷惑,一个东西在不同视角是不一样的。
建议楼主用HTOP,清晰方便,高效,还带命令行显示图。
另外附上
Linux通过进程查看线程的方法 1).
htop
按t(显示进程线程嵌套关系)和H(显示线程) ,然后F4过滤进程名。2).ps -eLf | grep java
(快照,带线程命令,e是显示全部进程,L是显示线程,f全格式输出) 3).pstree -p <pid>
(显示进程树,不加pid显示所有) 4).top -Hp <pid>
(实时) 5).ps -T -p <pid>
(快照) 推荐程度按数字从小到大。希望能被采纳!