2016-11-02 16 views
7

Tôi đã viết chương trình C cần sử dụng CPU và bộ nhớ riêng. Vì vậy, tôi đã viết một cái gì đó như thế này:lệnh trên trả về 0% mức sử dụng CPU khi tôi kiểm tra mức sử dụng CPU của quá trình từ trong quá trình

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

tên ứng dụng của tôi là PRS và tôi làm một PS và nhận được pid của quá trình tôi và sau đó muốn có được sử dụng CPU chạy TOP. Chương trình báo cáo nó đang sử dụng bộ nhớ 2% và CPU 0%. Tuy nhiên, việc chạy lệnh tương tự theo cách thủ công trên cmd sẽ trả về cùng một cách sử dụng memry nhưng một CPU khác không hợp lệ mà tôi có thể xác minh bằng cách chạy trên cùng. Những gì tôi không hiểu là tại sao việc sử dụng CPU luôn 0% khi đã cố gắng từ bên trong hệ thống?

+0

Nếu bạn đang sử dụng Linux, chỉ cần đọc từ '/ proc': http://stackoverflow.com/q/16726779/8446 –

Trả lời

8

Khi bạn đang chạy lệnh system, quy trình hiện tại bị tạm ngưng (không chắc chắn nếu đó là thời hạn thích hợp, nhưng không chạy ở bất kỳ mức nào), chờ lệnh bạn chạy đến kết thúc.

Trong khi bị tạm ngưng, mức sử dụng CPU của nó là 0%, được mong đợi.

Để nhận thông tin chính xác, bạn phải chạy lệnh system trong một luồng hoặc quy trình riêng biệt để chương trình của bạn có thể tiếp tục chạy.

+0

Oh Tôi nghĩ bạn đúng, trạng thái quy trình cho biết S khi tôi in toàn bộ dòng trong lệnh trên từ bên trong hệ thống. Cảm ơn bạn! –

+0

cảm ơn cho một câu hỏi rất hay. Bây giờ đọc http://stackoverflow.com/help/someone-answers –

+0

Tôi đã sử dụng popen() thay vì hệ thống và bây giờ nó hoạt động! Cảm ơn rất nhiều. Câu trả lời là tại chỗ! –

Các vấn đề liên quan