【问题标题】:top command returns 0% CPU usage when I check my process's CPU usage from within the process当我从进程中检查进程的 CPU 使用率时,top 命令返回 0% CPU 使用率
【发布时间】:2016-11-02 20:08:18
【问题描述】:

我编写了一个 C 程序,它需要获取自己的 CPU 和内存使用情况。所以我写了这样的东西:

        system("prs_pid=`ps | grep prs-m1 | awk '{print $1}'` \n top -n1 | grep -m1 $prs_pid | \
                    awk '{print \"prs_cpu:\" $7 \"\\nprs_mem:\" $6}' >> /stats");

我的应用程序名称是 prs,我执行 PS 并获取进程的 pid,然后想从运行 TOP 中获取 CPU 使用率。该程序报告它正在使用 2% 的内存和 0% 的 CPU。但是,在 cmd 上手动运行相同的命令会返回相同的内存使用情况,但会返回一个有效的非零 CPU,我可以通过运行 top 来验证它。我不明白的是,为什么从系统内部尝试时 cpu 使用率总是 0%?

【问题讨论】:

标签: c bash


【解决方案1】:

当您运行system 命令时,当前进程被挂起(不确定它是否是正确的术语,但无论如何都不会运行),等待您运行的命令结束。

当它被挂起时,它的 CPU 使用率为 0%,这是预期的。

要获得正确的信息,您必须在单独的线程或进程中运行您的system 命令,这样您的程序才能继续运行。

【讨论】:

  • 哦,我认为你是对的,当我从系统内部在 top 命令中打印整行时,进程状态显示为 S。谢谢!
  • 感谢您提出一个非常好的问题。现在阅读stackoverflow.com/help/someone-answers
  • 我用 popen() 代替了 system,现在它可以工作了!非常感谢。答案就在眼前!
  • popen()!避免使用fork 和线程的好技巧。我会记住这一点的。
猜你喜欢
  • 2010-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-24
  • 2015-06-06
  • 1970-01-01
  • 1970-01-01
  • 2011-02-26
相关资源
最近更新 更多