2012-10-05 14 views
5

Estoy desarrollando una aplicación C++ con capacidades de supervisión de procesos, que monitorea los cambios de estado en base a este modelo: http://www.macdesign.net/capella/it4813/images/stallings-Linux_process-thread_states-f4.18.pngLinux - Encuentra si el proceso está listo o correr

Sin embargo, como/proc/PID/estado combina tanto la "listo" y "ejecutando" estados en "ejecución", no sé cómo puedo descubrir en cuál de estos estados se encuentra realmente un proceso. ¿Alguien puede ofrecer alguna sugerencia sobre cómo puedo descubrir esto?

+5

Sugerencias: consulte [aquí] (http://procps.sourceforge.net/), [aquí] (http://www.linux-tutorial.info/modules.php?name=MContent&pageid=84) y [ aquí] (http://www.linux-tutorial.info/modules.php?name=MContent&pageid=174). El primer enlace en particular, aunque use/proc, debería darle muchos consejos útiles. 'Espero que ayude ... – paulsm4

+0

en máquinas de un solo núcleo de gama baja, por ejemplo. netbooks baratos: solo se ejecuta un proceso en un instante dado, y ese sería su proceso de supervisión (en máquinas multinúcleo, la historia es diferente). Entonces realmente quiere medir si un proceso determinado se ha estado ejecutando durante los últimos jiffies, es decir. quizás durante el último decisegundo. –

Respuesta

2

La pregunta está mal formada. En una sola CPU, es literalmente nunca posible ver un proceso en el estado "en ejecución", porque por definición el proceso de supervisión tiene la CPU. Si realmente necesita un control de registro detallado sobre las transiciones del proceso, debe hacerlo en el kernel (o al menos con soporte para kernel; consulte lttng o systemtap para ver las herramientas que pueden ayudar aquí). Las herramientas para rastrear el uso de la CPU del espacio de usuario son más generales, ya sea utilizando los números de uso total ya rastreados por el núcleo (por ejemplo, /usr/bin/time) o muestreando la tabla de proceso a intervalos (el cuadro de arranque funciona de esta manera).

Cuestiones relacionadas