我嘗試使用C/C++編寫程序,其行爲與Linux中的top命令類似。 我已經做了一些研究,並且已經知道如何計算一個進程的CPU使用率。我們可以通過在當前時間和幾秒後從/ proc/[PID]/stat計算stime + utime來獲得CPU使用率。然後計算stime + utime差異並將結果與正常運行時間差異分開,然後獲得CPU使用率百分比。單進程/多線程進程將非常簡單。如何統計Linux中多進程應用程序的CPU使用情況
問題出現在httpd這樣的情況下,它作爲多進程工作。當web服務器忙時,httpd將fork子進程來服務一堆請求。然後我計算總進程的數量,比方說500.我想計算這些進程的CPU使用情況,但總結它們,所以我只看到1個httpd CPU使用情況。但是,如果我按照上面提到的算法進行操作,那麼在幾秒鐘後進程數減少到< 500時,我會得到負值,因爲計算結果將如此(例如,我選擇隨機數,給你簡要說明):
Uptime: 155123, No of processes : 500, Stime + Utime total of 500 processes : 3887481923874
Uptime: 155545, No of processes : 390, Stime + Utime total of 390 processes : 2887123343874
如果你看一下上面的例子中,表準時+ UTIME的增量將導致負值,因爲過程的數量減少,並給幾個毫秒之後的下限值。我只想知道,有沒有其他方法可以計算這樣的過程?謝謝。
你怎麼知道這套過程?通過它的流程組?通過程序的名稱? – 2012-01-11 08:03:35
首先,我得到主父進程。我知道,因爲它有ppid 1,我們說它的pid 1227.然後,搜索整個/ proc /目錄,其中有ppid 1227.如果/ proc/pid1/stat有ppid 1227,那麼我將它的utime和stime添加到1227年的時候和stime。 – 2012-01-11 08:08:13