2016-11-02 6 views
7

자체 CPU 및 메모리 사용량을 얻어야하는 C 프로그램을 작성했습니다.프로세스 내에서 프로세스의 CPU 사용량을 확인할 때 top 명령이 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을 실행하여 확인할 수있는 유효한 0이 아닌 CPU를 반환합니다. 내가 이해하지 못하는 이유는 시스템 내부에서 시도했을 때 CPU 사용이 항상 0 %라는 것입니다.

+0

리눅스에서'/ proc'을 읽는 것 : http://stackoverflow.com/q/16726779/8446 –

답변

8

system 명령을 실행 중일 때 현재 프로세스가 일시 중지되었지만 (적절한 기간이지만 확실하게 실행되지는 않음) 종료하기 위해 실행 한 명령을 기다리고 있습니다.

일시 중지 된 상태에서 CPU 사용률은 0 %로 예상됩니다.

올바른 정보를 얻으려면 system 명령을 별도의 스레드 또는 프로세스에서 실행해야 프로그램을 계속 실행할 수 있습니다.

+0

오, 내가 옳았다 고 생각합니다. 프로세스 상태가 S로 말하면 전체 라인을 인쇄했습니다. 시스템 내의 top 명령에서. 고맙습니다! –

+0

아주 좋은 질문에 감사드립니다. 지금은 http://stackoverflow.com/help/someone-answers을 읽어라 –

+0

나는 시스템 대신 popen()을 사용했다. 고마워. 대답은 계속되었다! –