ps显示线程名称
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ps显示线程名称相关的知识,希望对你有一定的参考价值。
有没有办法让ps
(或类似的工具)显示pthread的名字?我写了以下简单的程序:
// th_name.c
#include <stdio.h>
#include <pthread.h>
void * f1() {
printf("f1 : Starting sleep
");
sleep(30);
printf("f1 : Done sleep
");
}
int main() {
pthread_t f1_thread;
pthread_create(&f1_thread, NULL, f1, NULL);
pthread_setname_np(f1_thread, "f1_thread");
printf("Main : Starting sleep
");
sleep(40);
printf("Main : Done sleep
");
return 0;
}
是否有一个命令/实用程序(如ps
)可用于显示上述程序的线程及其名称。
$ /tmp/th_name > /dev/null &
[3] 2055
$ ps -eLf | egrep "th_name|UID"
UID PID PPID LWP C NLWP STIME TTY TIME CMD
aal 31088 29342 31088 0 2 10:01 pts/4 00:00:00 /tmp/th_name
aal 31088 29342 31089 0 2 10:01 pts/4 00:00:00 /tmp/th_name
aal 31095 29342 31095 0 1 10:01 pts/4 00:00:00 egrep th_name|UID
我在Ubuntu 12.10上运行我的程序。
请注意man page of pthread_setname_np(),它已经展示了如何获取线程的名称:
pthread_setname_np()在内部写入/ proc filesystem下的特定于线程的comm文件:/ proc / self / task / [tid] / comm。 pthread_getname_np()从同一位置检索它。
和
例
下面的程序演示了如何使用pthread_setname_np()和pthread_getname_np()。
以下shell会话显示了该程序的示例运行:
$ ./啊.呕吐
创建了一个主题。默认名称是:a.out
设置后的线程名称为THREADFOO。
^ Z #Suspend程序
1 +停止./a.out
$ ps H -C a.out -o'pid tid cmd comm'
PID TID CMD命令
5990 5990 ./a.out a.out
5990 5991 ./a.out THREADFOO
$ cat / proc / 5990 / task / 5990 / comm
的a.out
$ cat / proc / 5990 / task / 5991 / comm
THREADFOO
使用procps-ng(https://gitlab.com/procps-ng/procps)有输出选项-L
和-T
将打印线程名称:
$ ps -eL
$ ps -eT
-l
长格式可以与它们一起使用:
$ ps -eLl
$ ps -eTl
但-f
选项将用完整的命令行替换线程名称,这对所有线程都是相同的。
使用PID 12345显示进程的线程ID和名称:
ps H -o 'tid comm' 12345
以上是关于ps显示线程名称的主要内容,如果未能解决你的问题,请参考以下文章
Sphinx、reStructuredText 显示/隐藏代码片段