리눅스 CPU 사용량 출력하기

 

리눅스 OS 에서 동작하는 초단위로 CPU 사용량을 출력하는 프로그램을 perl 로 작성하였습니다. 소스 코드는 아래와 같아요.


 


================================================================================================================


#!/usr/bin/perl


use strict;


 


# 변수 선언


my $bIsFirst = 1;
my ( $iUser, $iSystem, $iIdle, $iSum );
my ( $iOldUser, $iOldSystem, $iOldIdle );
my @arrList = ();
my @arrTime;
my $strText;


 


while(1)
{


 # 현재 시간을 구한다.
 @arrTime = localtime(time);


 


 # /proc/stat 파일에서 최상위 CPU 정보를 가져와서 현재의 CPU 사용량을 구한다.
 open(FILE,"/proc/stat") or die "/proc/stat open error: $!";
 while(<FILE>)
 {
  @arrList = split( /\s+/, $_ );


  if( $bIsFirst == 1 )
  {
   $iOldUser = $arrList[1];
   $iOldSystem = $arrList[3];
   $iOldIdle = $arrList[4];
   $bIsFirst = 0;
   last;
  }



  $iUser = $arrList[1] - $iOldUser; 
  $iSystem = $arrList[3] - $iOldSystem; 
  $iIdle = $arrList[4] - $iOldIdle;


 


  $iOldUser = $arrList[1];
  $iOldSystem = $arrList[3];
  $iOldIdle = $arrList[4];


  $iSum = $iUser + $iSystem + $iIdle;


  # CPU 사용량의 퍼센트 단위로 계산한다.


  $iUser = ( $iUser * 100 ) / $iSum;
  $iSystem = ( $iSystem * 100 ) / $iSum;
  $iIdle = ( $iIdle * 100 ) / $iSum;


 


  $strText = sprintf( "%04d-%02d-%02d %02d:%02d:%02d %.1f%%us %.1f%%sy %.1f%%id\n"
   , $arrTime[5] + 1900, $arrTime[4] + 1, $arrTime[3]
   , $arrTime[2], $arrTime[1], $arrTime[0]
   , $iUser, $iSystem, $iIdle );
  print "$strText";


  last;
 }
 close(FILE);
 sleep(1);
}