리눅스 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);
}
[출처] 리눅스 CPU 사용량 출력하기|작성자 까미유