ps의 CPU 시간 출력 형식


13

간격 동안 프로세스의 CPU 사용량을 모니터링 할 수있는 스크립트를 작성하려고합니다 (그래프를 만들기 위해).

지금까지 이것은 내가 사용하는 명령입니다

ps -p $PROCID -o cputime,etimes

내 유일한 관심사는 cputime의 출력이 [dd]hh:mm(또는 비슷한 것으로 내 머리 꼭대기에서 기억할 수 없음) 것으로 보입니다.

etime-> etimes와 같은 cputime을 초 단위로 초 단위로 포맷하는 방법이 있습니까?

편집 : 이것은 현재 받고있는 출력입니다.

2-03:01:33 2653793

첫 번째 매개 변수를 일 시간 : 분 : 초가 아닌 초 단위로 포맷하고 싶습니다.


지금 받고있는 출력과 받고 싶은 출력을 추가 할 수 있습니까?
Simply_Me

@Simply_Me 게시물을 편집했습니다
dreadiscool

@ John1024 네, 그렇습니다.
dreadiscool

답변:


9

처음 시간을 초로 변환합니다.

ps -p $PROCID -o cputime,etimes | awk -F'[: ]+' '/:/ {t=$3+60*($2+60*$1); print t,$NF}'

예를 들어, ps 명령은 다음을 생성합니다.

$ ps -p 5403 -o cputime,etimes
    TIME ELAPSED
01:33:38 1128931

awk명령은 반환 처리합니다

ps -p 5403 -o cputime,etimes | awk -F'[: ]+' '/:/ {t=$3+60*($2+60*$1); print t,$NF}'
5618 1128931

설명

  • -F'[: ]+'

    이것은 awk에게 콜론과 공백을 필드 분리 자로 취급하도록 지시합니다. 이런 식으로시, 분 및 초가 별도의 필드로 나타납니다.

  • /:/ {t=$3+60*($2+60*$1); print t,$NF}

    초기 /:/는 코드가 콜론을 포함하는 행에서만 작동하도록 제한합니다. 헤더 행이 제거됩니다. 초는를 통해 시간, 분, 초에서 계산됩니다 t=$3+60*($2+60*$1). t그런 다음에 대한 결과 값 이 경과 시간과 함께 인쇄됩니다.

취급 일

다음과 같이 ps일,시, 분, 초를 생성하는 경우 :

2-03:01:33

그런 다음이 코드를 대신 사용하십시오.

ps -p $PROCID -o cputime,etimes | awk -F'[-: ]+' '/:/ {t=$4+60*($3+60*($2+24*$1)); print t,$NF}'

요일이 출력에 추가되거나 추가되지 않을 경우 다음 조합 명령을 사용하십시오.

ps -p $PROCID -o cputime,etimes | awk -F'[-: ]+' '/:/ && NF==5 { t=$4+60*($3+60*($2+24*$1)); print t,$NF} /:/ && NF==4 {t=$3+60*($2+60*$1); print t,$NF}'

내가 잘못 해요,하지만이 명령은 앞에 추가 할 수있는 계정 일 고려되는 것처럼 보이지 않는 경우에 저를 용서
dreadiscool

맞습니다. 시스템에 프로세스에 대한 날짜가 표시되지 않았습니다. 어떤 날이 생길지 추측 할 수 있지만 실제 예를 제공 할 수 있습니까?
John1024

2-03 : 01 : 33은 2 일, 3 시간, 1 분 및 33 초입니다. 그래도 요일이 항상 앞에 붙는 것은 아닙니다. 내 시스템에서는 프로세스가 24 시간 이상 지속 된 경우에만 추가됩니다. 지금까지 도와 주셔서 감사합니다. 감사합니다
dreadiscool

@ user1772510 답변을 업데이트하여 요일을 처리했습니다.
John1024

당신의 모든 도움에 감사드립니다. 만약 내가 투표를 할 수 있다면 나는 또한 투표를했을 것입니다.
dreadiscool

2

게임에서 awk를 원하지 않으면 순수한 bash 솔루션 (t_str에는 형식화 된 문자열이 포함되어 있으며, t_sec는 디코딩 된 시간을 초 단위로 표시합니다) :

# Decode the CPU time format [dd-]hh:mm:ss.
IFS="-:" read c1 c2 c3 c4 <<< "$t_str"
if [ -n "$c4" ]
then
  t_sec=$((10#$c4+60*(10#$c3+60*(10#$c2+24*10#$c1))))
else
  t_sec=$((10#$c3+60*(10#$c2+60*10#$c1)))
fi

0

운영 체제를 지정하지 않았습니다. Linux 인 경우 특정 프로세스 모니터링에 관심이있는 경우 구문 분석하는 것이 더 가치가있을 수 있습니다. 자세한 /proc/$PROCID/stat내용은 proc(5)매뉴얼 페이지를 참조하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.