2012-10-05 23 views
5

Sto sviluppando un'applicazione C++ con capacità di monitoraggio di processo, che monitora i cambiamenti di stato sulla base di questo modello: http://www.macdesign.net/capella/it4813/images/stallings-Linux_process-thread_states-f4.18.pngLinux - Trova se il processo è pronto o in esecuzione

Tuttavia, come/proc/PID/status combina sia la "pronto" e "in esecuzione" si afferma in "esecuzione", sono in perdita su come posso scoprire quale di questi stati è effettivamente un processo. Qualcuno può offrire qualche suggerimento su come posso scoprire questo?

+5

Suggerimenti: guarda [qui] (http://procps.sourceforge.net/), [qui] (http://www.linux-tutorial.info/modules.php?name=MContent&pageid=84) e [ qui] (http://www.linux-tutorial.info/modules.php?name=MContent&pageid=174). Il primo collegamento in particolare, anche se utilizza/proc, dovrebbe darti molti consigli utili. 'Spero che questo aiuti ... – paulsm4

+0

Su macchine single-core di fascia bassa -e.g. netbook economici: solo un processo è in esecuzione in un dato istante e questo sarebbe il processo di monitoraggio (su macchine multicore, la storia è diversa). Quindi in realtà vuoi misurare se un determinato processo è stato eseguito durante gli ultimi jiffies, ad es. forse durante l'ultimo decisore. –

risposta

2

La domanda è malformata. Su una singola CPU, è letteralmente mai possibile vedere un processo nello stato "in esecuzione", perché per definizione il processo di monitoraggio ha la CPU. Se hai davvero bisogno di un controllo di granularità delle transizioni di processo, devi farlo nel kernel (o almeno con il supporto nel kernel - vedi lttng o systemtap per gli strumenti che potrebbero aiutarti). Gli strumenti per tracciare l'utilizzo della CPU dallo spazio utente sono più grossolani, utilizzando i numeri di utilizzo totali già tracciati dal kernel (ad esempio /usr/bin/time) o campionando la tabella del processo a intervalli (il diagramma di avvio funziona in questo modo).

Problemi correlati