Multithreading C++;:Linux上的pthread状态监视

Multithreading C++;:Linux上的pthread状态监视,multithreading,pthreads,Multithreading,Pthreads,我有一个运行8个独立线程的应用程序,它是通过围绕Pthread的包装类生成的。所有线程都在无限while循环中运行,每个线程的循环时间为1秒。从主线程(main函数,也在无限while循环中运行),我想监控线程的状态,看线程是否因为某种原因被阻塞。有没有办法通过系统调用来监视线程状态?GDB是最好的选择 使用以下命令将gdb附加到正在运行的进程 gdb -p "pid" info threads 这将显示应用程序中的所有线程以及每个线程的状态,GDB是最佳选项 使用以下命令将gdb附加到正在

我有一个运行8个独立线程的应用程序,它是通过围绕Pthread的包装类生成的。所有线程都在无限while循环中运行,每个线程的循环时间为1秒。从主线程(main函数,也在无限while循环中运行),我想监控线程的状态,看线程是否因为某种原因被阻塞。有没有办法通过系统调用来监视线程状态?

GDB是最好的选择

使用以下命令将gdb附加到正在运行的进程

gdb -p "pid"

info threads

这将显示应用程序中的所有线程以及每个线程的状态,GDB是最佳选项

使用以下命令将gdb附加到正在运行的进程

gdb -p "pid"

info threads

这将显示应用程序中的所有线程以及每个线程的状态。您可以访问proc文件系统中的进程状态信息。使用线程的PID,您可以在
/proc/[PID]/status

状态文件的内容如下所示:

ubuntu@ip-172-30-1-159:/proc/1151$ cat status
Name:   systemd-logind
State:  S (sleeping)
Tgid:   1151
Ngid:   0
Pid:    1151
PPid:   1
TracerPid:  0
Uid:    0   0   0   0
Gid:    0   0   0   0
...

您可以访问proc文件系统中的进程状态信息。使用线程的PID,您可以在
/proc/[PID]/status

状态文件的内容如下所示:

ubuntu@ip-172-30-1-159:/proc/1151$ cat status
Name:   systemd-logind
State:  S (sleeping)
Tgid:   1151
Ngid:   0
Pid:    1151
PPid:   1
TracerPid:  0
Uid:    0   0   0   0
Gid:    0   0   0   0
...

您可以从主线程调用ps并查看各个线程的状态,例如,如果线程处于S+或D状态。或者查看ps src代码并直接执行,而不调用ps并解析其输出。您可以从主线程调用ps并查看各个线程的状态,例如,如果线程处于S+或D状态。或者查看ps src代码,直接执行,而不调用ps并解析其输出。我想在程序本身中执行,gdb不是一个选项…根据线程状态有一些决策要做我想在程序本身中执行,gdb不是一个选项…根据线程状态有一些决策要做