![실행 중인 프로세스의 사용자 및 커널 시간을 얻으시겠습니까?](https://linux55.com/image/37180/%EC%8B%A4%ED%96%89%20%EC%A4%91%EC%9D%B8%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%9D%98%20%EC%82%AC%EC%9A%A9%EC%9E%90%20%EB%B0%8F%20%EC%BB%A4%EB%84%90%20%EC%8B%9C%EA%B0%84%EC%9D%84%20%EC%96%BB%EC%9C%BC%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
프로세스가 사용자 모드에서 소비하는 시간과 커널을 기다리는 시간을 결정하기 위해 표준 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 time
및 14 + 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