Ich habe es geschafft, den Code auf dieser listing zu implementieren, um eine Liste aller laufenden Prozesse und ihre IDs zu erhalten. Was ich jetzt brauche, ist zu extrahieren, wie viel Zeit jeder Prozess die CPU benutzt.Zeit CPU von Prozess
Ich habe versucht, auf die Schlüssel im Code zu beziehen, aber wenn ich versuche, "Ticks of CPU Time" zu drucken, bekomme ich einen Nullwert für alle Prozesse. Selbst wenn ich einen Wert bekommen habe, bin ich mir nicht sicher, ob "Zecken der CPU-Zeit" genau das ist, wonach ich suche.
struct vmspace *p_vmspace; /* Address space. */
struct sigacts *p_sigacts; /* Signal actions, state (PROC ONLY). */
int p_flag; /* P_* flags. */
char p_stat; /* S* process status. */
pid_t p_pid; /* Process identifier. */
pid_t p_oppid; /* Save parent pid during ptrace. XXX */
int p_dupfd; /* Sideways return value from fdopen. XXX */
/* Mach related */
caddr_t user_stack; /* where user stack was allocated */
void *exit_thread; /* XXX Which thread is exiting? */
int p_debugger; /* allow to debug */
boolean_t sigwait; /* indication to suspend */
/* scheduling */
u_int p_estcpu; /* Time averaged value of p_cpticks. */
int p_cpticks; /* Ticks of cpu time. */
fixpt_t p_pctcpu; /* %cpu for this process during p_swtime */
void *p_wchan; /* Sleep address. */
char *p_wmesg; /* Reason for sleep. */
u_int p_swtime; /* Time swapped in or out. */
u_int p_slptime; /* Time since last blocked. */
struct itimerval p_realtimer; /* Alarm timer. */
struct timeval p_rtime; /* Real time. */
u_quad_t p_uticks; /* Statclock hits in user mode. */
u_quad_t p_sticks; /* Statclock hits in system mode. */
u_quad_t p_iticks; /* Statclock hits processing intr. */
int p_traceflag; /* Kernel trace points. */
struct vnode *p_tracep; /* Trace to vnode. */
int p_siglist; /* DEPRECATED */
struct vnode *p_textvp; /* Vnode of executable. */
int p_holdcnt; /* If non-zero, don't swap. */
sigset_t p_sigmask; /* DEPRECATED. */
sigset_t p_sigignore; /* Signals being ignored. */
sigset_t p_sigcatch; /* Signals being caught by user. */
u_char p_priority; /* Process priority. */
u_char p_usrpri; /* User-priority based on p_cpu and p_nice. */
char p_nice; /* Process "nice" value. */
char p_comm[MAXCOMLEN+1];
struct pgrp *p_pgrp; /* Pointer to process group. */
struct user *p_addr; /* Kernel virtual addr of u-area (PROC ONLY). */
u_short p_xstat; /* Exit status for wait; also stop signal. */
u_short p_acflag; /* Accounting flags. */
struct rusage *p_ru; /* Exit information. XXX */
In der Tat habe ich auch versucht, Zeit gemittelte Wert von p_cpticks und ein paar anderen zu drucken und bekam nie interessante Werte. Hier ist mein Code, der die abgerufenen Informationen druckt (ich habe es von cocoabuilder.com bekommen):
Vielen Dank!
EDIT: Ich habe gerade ein Kopfgeld für diese Frage angeboten. Ich suche speziell nach der Zeit, die jeder Prozess in der CPU verbringt.
Wenn Sie zusätzlich angeben können, dass% CPU von einem Prozess verwendet wird, wäre das fantastisch.
Der Code sollte optimal sein, da er jede Sekunde aufgerufen wird und die Methode bei allen laufenden Prozessen aufgerufen wird. Ziel-C vorzuziehen.
Danke nochmal!
EDIT 2
Auch die Kommentare, warum Menschen diese Frage ignorieren auch hilfreich sein würde :)
Ich denke nicht dass Leute deine Frage ignorieren. Es ist nur so, dass Low-Level-OS-Programmierung für Mac ein sehr spezielles Thema ist. Die Messung der tatsächlichen Zeit, die ein Prozess in der CPU verbringt, ist ebenfalls ein strittiges Thema. – kazanaki
Danke für die Rückmeldung. Eine Zeitlang fühlte ich mich im Cyberspace verloren. Hoffentlich können wir bald Antworten bekommen. –
das wird Ihnen nicht helfen, aber scheint, dass in dem obigen Code drucken Sie zweimal die PID – rano