2012-10-05 23 views
5

Zajmuję się C++ aplikacji z możliwościami monitorowania procesu, który monitoruje zmiany stanu oparte na tym modelu: http://www.macdesign.net/capella/it4813/images/stallings-Linux_process-thread_states-f4.18.pngLinux - Znajdź, jeśli proces jest gotowy lub bieganie

Jednakże, jak/proc/pid/status łączy zarówno "Gotowy" i "Wykonujący" stwierdza "bieganie", nie mam pojęcia, w jaki sposób mogę się dowiedzieć, w którym z tych stanów faktycznie znajduje się proces. Czy każdy może zaproponować, w jaki sposób mogę to odkryć?

+5

Propozycje: look [tutaj] (http://procps.sourceforge.net/), [tutaj] (http://www.linux-tutorial.info/modules.php?name=MContent&pageid=84) i [ tutaj] (http://www.linux-tutorial.info/modules.php?name=MContent&pageid=174). Pierwszy link w szczególności, mimo że używa/proc, powinien dać ci wiele przydatnych wskazówek. "Nadzieję, że pomaga ... – paulsm4

+0

Na low-endowych maszynach z pojedynczym rdzeniem -e.g. tani netbooki - tylko jeden proces działa w danej chwili, a to byłby twój proces monitorowania (na maszynach wielordzeniowych historia jest inna). Więc faktycznie chcesz zmierzyć, czy dany proces został uruchomiony podczas ostatnich kilku jiffies, czyli. być może w ciągu ostatniego dekisekundy. –

Odpowiedz

2

Pytanie jest błędne. W przypadku pojedynczego procesora, jest możliwe, że proces jest wyświetlany w stanie "działa", ponieważ z definicji proces monitorowania ma procesor. Jeśli naprawdę potrzebujesz drobnoziarnistej kontroli logowania nad zmianami procesu, musisz to zrobić w jądrze (lub przynajmniej w obsłudze jądra - patrz lttng lub systemtap dla narzędzi, które mogą pomóc tutaj). Narzędzia do śledzenia użycia procesora z przestrzeni użytkownika są bardziej gruboziarniste, albo przy użyciu całkowitych numerów użycia już śledzonych przez jądro (na przykład /usr/bin/time) lub przez próbkowanie tabeli procesu w odstępach czasu (bootchart działa w ten sposób).