2016-11-02 13 views
7

独自のCPUおよびメモリ使用率を必要とするCプログラムを作成しました。トップコマンドは、プロセス内からプロセスのCPU使用率をチェックすると0%の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で手動で実行すると、同じmemryの使用法が返されますが、topを実行して検証できる有効な非ゼロのCPUが返されます。私が理解していないのは、システム内部から試してみると、なぜCPU使用率が常に0%ですか?

+0

Linuxの場合は、 '/ proc'から読んでください:http://stackoverflow.com/q/16726779/8446 –

答えて

8

systemコマンドを実行しているとき、現在のプロセスは中断されます(適切な用語であるかどうかはわかりませんが、どんな速度でも実行されません)。

中断されている間、そのCPU使用率は0%です(これは予想されます)。

正しい情報を取得するには、別のスレッドまたはプロセスでsystemコマンドを実行する必要があります。これにより、プログラムを実行し続けることができます。

+0

ああ、私はあなたが正しいと思っています。システム内のトップコマンドで実行します。ありがとうございました! –

+0

非常に良い質問をありがとう。今度はhttp://stackoverflow.com/help/someone-answersを読んでください –

+0

私はシステムの代わりにpopen()を使っています。どうもありがとう。答えは上にあった! –

関連する問題