objective-c – 进程使用的时间CPU

objective-c – 进程使用的时间CPU,第1张

概述我已设法在此 listing上实现代码,以获取所有正在运行的进程及其ID的列表.我现在需要的是提取每个进程使用CPU的时间. 我已经尝试过引用代码中的键,但是当我尝试打印’Ticks of CPU Time’时,我得到了所有进程的零值.另外,即使我确实得到了一个值,我也不确定“Ticks of CPU Time”是否正是我正在寻找的. struct vmspace *p_vmspace; /* 我已设法在此 listing上实现代码,以获取所有正在运行的进程及其ID的列表.我现在需要的是提取每个进程使用cpu的时间.

@H_502_8@

我已经尝试过引用代码中的键,但是当我尝试打印’Ticks of cpu Time’时,我得到了所有进程的零值.另外,即使我确实得到了一个值,我也不确定“Ticks of cpu Time”是否正是我正在寻找的.@H_502_8@

@H_502_8@ @H_404_13@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 */

事实上,我也尝试打印时间平均值p_cpticks和其他几个,从来没有得到有趣的值.这是我的代码打印检索到的信息(我从cocoabuilder.com得到它):@H_502_8@

@H_502_8@ @H_404_13@- (NSDictionary *) getProcessList { NSMutableDictionary *ProcList = [[NSMutableDictionary alloc] init]; kinfo_proc *myList; size_t mycount = 0; myList = (kinfo_proc *)malloc(sizeof(kinfo_proc)); GetBSDProcessList(&myList,&mycount); printf("There are %d processes.\n",(int)mycount);NSLog(@" = = = = = = = = = = = = = = ="); int k; for(k = 0; k < mycount; k++) { kinfo_proc *proc = NulL; proc = &myList[k]; // Nsstring *processname = [Nsstring stringWithFormat: @"%s",proc->kp_proc.p_comm]; //[ ProcList setobject: processname forKey: processname ]; // [ ProcList setobject: proc->kp_proc.p_pID forKey: processname]; // printf("ID: %d - name: %s\n",proc->kp_proc.p_pID,proc->kp_proc.p_comm); printf("ID: %d - name: %s cpu TIME: %d \n",proc->kp_proc.p_comm,proc->kp_proc.p_pID ); // Right click on p_comm and select 'jump to deFinition' to find other values. } free(myList); return [ProcList autorelease];}

谢谢!@H_502_8@

编辑:我刚刚为这个问题提供了赏金.我特别想要的是获得每个进程在cpu中花费的时间.@H_502_8@

除此之外,如果您可以为进程使用%cpu,那将是非常棒的.@H_502_8@

代码应该是最佳的,因为它将每秒调用一次,并且将在所有正在运行的进程上调用该方法. Objective-C更可取.@H_502_8@

再次感谢!@H_502_8@

编辑2@H_502_8@

此外,任何关于为什么人们忽略这个问题的评论也会有所帮助:)@H_502_8@解决方法 看一下 libtop.c的Darwin源代码,特别是libtop_pinfo_update_cpu_usage()函数.注意:

@H_502_8@

>您需要对Mach编程基础知识有基本的了解才能理解这段代码,因为它使用了任务端口等.
>如果您只想使用libtop,则必须下载源代码并自行编译.
>您的进程需要特权才能进入其他进程的任务端口.@H_502_8@

如果所有这些听起来相当令人生畏,那么……有一种方法可以使用更少的深奥API:只产生一个顶级进程并解析其标准输出.快速浏览一下top(1)手册页出现了这个小宝石:@H_502_8@

@H_502_8@ @H_404_13@$top -s 1 -l 3600 -stats pID,cpu,time

也就是说,每秒一次采样3600秒(一小时),并以日志形式输出到stdout,仅显示pID,cpu使用情况和时间的统计信息.@H_502_8@

产生和管理子进程然后解析它的输出都是简单的Unix编程练习.@H_502_8@ 总结

以上是内存溢出为你收集整理的objective-c – 进程使用的时间CPU全部内容,希望文章能够帮你解决objective-c – 进程使用的时间CPU所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1016380.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存