2017-03-21 5 views
1

Ich habe eine Anwendung mit 8 unabhängigen Threads, generiert durch eine Wrapper-Klasse um Pthread. Alle Threads laufen in einer unendlichen While-Schleife mit einer Zykluszeit von jeweils 1 Sekunde. Vom Hauptthread (Hauptfunktion, der auch in unendlicher while-Schleife läuft), möchte ich den Threadstatus überwachen, ob der Thread aus irgendeinem Grund blockiert wurde oder nicht. Gibt es eine Möglichkeit, über Systemaufrufe den Thread-Status zu überwachen?C++: Pthread Statusüberwachung unter Linux

+0

Sie ps von Haupt-Thread nennen könnte und betrachten Status der einzelnen Fäden, zum Beispiel, wenn der Thread im S + oder D-Zustand sitzt. Oder schau dir ps src code an und tue es direkt, ohne ps aufzurufen und seine Ausgabe zu parsen. –

Antwort

0

GDB ist die beste Option,

GDB auf den laufenden Prozess anhängen das unter Befehl

gdb -p "pid" 

info threads 

wird dies in der Anwendung und den Status von jedem Thread

+0

Ich möchte es im Programm selbst tun, gdb ist keine Option ... Haben einige Entscheidungen zu tun, basierend auf Thread-Status – user1678399

0

Sie alle Fäden anzeigen kann auf Prozessstatusinformationen im proc-Dateisystem zugreifen. Unter Verwendung der PIDs der Fäden, können Sie ihren Status in /proc/[PID]/status

die Inhalte der Statusdatei nachschlagen wie folgt aussieht:

[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 
...