실행 중인 프로세스의 사용자 및 커널 시간을 얻으시겠습니까?

실행 중인 프로세스의 사용자 및 커널 시간을 얻으시겠습니까?

프로세스가 사용자 모드에서 소비하는 시간과 커널을 기다리는 시간을 결정하기 위해 표준 Linux/Unix 도구를 사용할 수 있는 방법이 있습니까?

time즉, 를 사용할 때 얻는 것이 바로 "user"와 "sys" 값 이다.기간프로세스 실행 시간?

노트:한 가지 방법은 WBEM을 사용하고 Linux_UnixProcess를 열거하는 것이지만다른이 도구보다 내 목적은 WBEM 공급자가 나에게 말하는 내용, 즉 다른 도구를 사용해야 한다는 것을 확인하는 것입니다.

답변1

Linux에서 이 정보는 필드 14~17에 있습니다 /proc/$pid/stat(참조:공정(5)세부):

필드는 다음과 같습니다.

  • 14: 사용자 시간(시계 틱 수)
  • 15: 시스템 시간
  • 16: 사용자가 아이를 기다리는 시간
  • 17: 아이의 시스템 시간을 기다리는 중

(특정 프로세스의 모든 스레드는 동일한 값을 갖습니다)

직접적으로 보고되지는 않습니다 ps.

ps보고서 14 + 15 ps -o time14 + 15 + 16 + 17.ps --cumulative -o bsdtime

의 두 번째 필드에는 공백이나 개행 문자가 포함될 수 있으므로 awk's , ...를 사용하여 구문 분석 /proc/$pid/stat할 수 없습니다 .$1$2

다음과 같이 사용할 수 있습니다 perl.

$ perl -MPOSIX -l -0777 -ne '@f = /\(.*\)|\S+/gs;
    printf "utime: %.2f\nstime: %.2f\ncutime: %.2f\ncstime: %.2f\n",
      map {$_/POSIX::sysconf( &POSIX::_SC_CLK_TCK )}@f[13..16]' "/proc/$pid/stat"
utime: 3.79
stime: 2.06
cutime: 56.49
cstime: 34.27

getrusage(RUSAGE_SELF)프로세스는 자신의 시간을 사용하고 검색할 수 있습니다 getrusage(RUSAGE_CHILDREN).

times동일한 정보를 검색하기 위한 시스템 호출 도 있습니다 . POSIX 쉘에는 times내장 기능이 있습니다. 일부 셸에서는 이 정보도 제공합니다 time(매개변수 없이).

$ times
0m3.800s 0m2.060s
0m56.512s 0m34.276s

$ ps -o time -p "$$"
    TIME
00:00:05
$ ps --cumulative -o bsdtime -p "$$"
  TIME
  1:36

관련 정보