2012-10-05 2 views
5

ich eine C++ Anwendung mit Prozessüberwachung Fähigkeiten zu entwickeln, die auf der Grundlage dieses Modells Zustandsänderungen überwacht: http://www.macdesign.net/capella/it4813/images/stallings-Linux_process-thread_states-f4.18.pngLinux - Finden Sie, wenn Prozess bereit ist oder läuft

Doch wie/proc/pid/Status kombiniert sowohl die "Ready" und "Executing" sind "running", ich weiß nicht, wie ich herausfinden kann, in welchem ​​dieser Zustände sich ein Prozess tatsächlich befindet. Kann mir jemand Vorschläge geben, wie ich das herausfinden kann?

+5

Vorschläge: siehe [hier] (http://procps.sourceforge.net/), [hier] (http://www.linux-tutorial.info/modules.php?name=MContent&pageid=84) und [ hier] (http://www.linux-tutorial.info/modules.php?name=MContent&pageid=174). Insbesondere der erste Link, auch wenn er/proc verwendet, sollte Ihnen viele nützliche Tipps geben. "Hoffe, dass das hilft ... – paulsm4

+0

Auf Low-End-Single-Core-Maschinen-z. billige Netbooks - nur ein Prozess läuft zu einem bestimmten Zeitpunkt, und das wäre Ihr Monitoring-Prozess (auf Multicore-Maschinen ist die Geschichte anders). Sie möchten also tatsächlich messen, ob ein bestimmter Prozess in den letzten paar Jiffies ausgeführt wurde, d. vielleicht während der letzten Sekunde. –

Antwort

2

Die Frage ist falsch formatiert. Auf einer einzigen CPU ist es buchstäblich nie möglich, einen Prozess im Zustand "Running" zu sehen, weil per Definition der Überwachungsprozess die CPU hat. Wenn Sie eine fein abgestimmte Protokollierung der Prozessübergänge benötigen, müssen Sie dies im Kernel tun (oder zumindest mit In-Kernel-Unterstützung - siehe lttng oder systemtap für Tools, die hier helfen könnten). Werkzeuge zum Verfolgen der CPU-Nutzung aus dem Benutzerbereich sind grobkörniger, entweder unter Verwendung der Gesamtnutzungszahlen, die bereits vom Kernel verfolgt werden (z. B. /usr/bin/time), oder indem die Prozesstabelle in Intervallen abgetastet wird (Bootchart funktioniert auf diese Weise).

Verwandte Themen