2016-11-02 10 views
7

Kendi CPU'larını ve bellek kullanımını alması gereken bir C programı yazdım.top komutu, işlemimin CPU kullanımını işlemden geçirdiğimde% 0 CPU kullanımını döndürür

 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"); 

Benim uygulama adı prs ve ben bir PS yapmak ve benim sürecin pid almak ve TOP çalışmasını CPU kullanımını almak istiyorum: Ben böyle bir şey yazdım. Program,% 2 bellek ve% 0 CPU kullandığını bildiriyor. Ancak, aynı komutu cmd'de elle çalıştırmak aynı hatıra kullanımını döndürür, ancak üstte çalışarak doğrulayabildiğim sıfır olmayan bir CPU'yu döndürür. Anlamadığım şey, cpu kullanımının sistem içinden denendiğinde neden her zaman% 0 olmasıdır?

+0

Eğer Linux'unuz varsa, sadece/proc'den okuyabilirsiniz: http://stackoverflow.com/q/16726779/8446 –

cevap

8

system komutunu çalıştırırken, geçerli işlem askıya alınır (uygun bir terim olup olmadığından emin değil, herhangi bir oranda çalışıp çalışmadığından emin olun), sonuna kadar koştuğunuz komutu bekleyerek. Bu askıya alınan birlikte

, CPU kullanımı beklenen% 0 olan.

Doğru bilgi almak için, system komutunu ayrı bir iş parçacığı veya işlemde çalıştırmanız gerekir, böylece programınız çalışmaya devam edebilir.

+0

Oh, haklısınız, süreç durumu tüm satırı bastığımda S diyor sistem içinden üst komutta. Teşekkür ederim! –

+0

Çok iyi bir soru için teşekkürler. Şimdi –

+0

http://stackoverflow.com/help/someone-answers okumak yerine sistemin) (popen kullanılan ve şimdi çalışıyor! Çok teşekkürler. Cevap yerinde oldu! –

İlgili konular