2017-03-21 21 views
1

私は、8つの独立したスレッドを実行しているアプリケーションがあり、Pthreadの周りのラッパークラスによって生成されています。すべてのスレッドは無限ループ中で実行され、サイクルタイムはそれぞれ1秒です。メインスレッド(Main Function、無限ループ中で実行中)から、何らかの理由でスレッドがブロックされているかどうか、スレッドステータスを監視したい。スレッドの状態を監視するためのシステムコールによってそれを行う方法はありますか?C++:Linuxでのpthreadステータス監視

+0

あなたがメインスレッドからPSを呼び出し、個々のスレッドの状態を見て可能性があり、たとえば、スレッドがS +状態またはD状態にある場合。または、ps srcコードを見て、psを呼び出してその出力を解析せずに直接実行します。 –

答えて

0

GDBが最良の選択肢である、

あなたは、これは、各スレッドのアプリケーションや状況ですべてのスレッドを表示します

+0

私はプログラム自体でそれをやりたい、gdbはオプションではない...スレッドの状態に基づいて何かをする意思決定がある – user1678399

0

gdb -p "pid" 

info threads 

以下のコマンドを使用して、実行中のプロセスにGDBを添付procファイルシステム内のプロセス状態情報にアクセスできます。スレッドのPIDを使用して、ステータスファイルの/proc/[PID]/status

内容にその状態を調べることができようになっています

[email protected]:/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 
...