일주일 전에 저는 다음과 같은 시뮬레이션을 시작했습니다.
make rebuild; time make run
나는 이 명령을 사용하여 time
각 경우에 사용된 CPU 시간을 기록했습니다.
일주일 후 시뮬레이션이 완료되었는데, 놀랍게도 시간 통계가 표시되지 않았습니다. 목표는 make run
기본적으로 다음과 같습니다.
python SCRIPTNAME | tee SCRIPTNAME.log
실제로 마지막 4~5번의 반복(10000)에 해당하는 출력을 찾을 수 없습니다. 화면에 표시되지도 않고 로그 파일에 추가되지도 않습니다.)
내 질문은 다음과 같습니다
어떻게 그럴 수 있습니까?
time
제가 설명한 상황에서 전체 시뮬레이션을 다시 실행하지 않아도 되도록 주기적으로 시간 통계를 표시 할 수 있습니까 ?
답변1
출력은 time
stderr에 표시됩니다. 따라서 출력을 로그 파일에 캡처하려면 stderr을 리디렉션해야 합니다.
zsh
하지만 like in ksh
에서는 time
키워드라는 점에 유의하세요 .
time cmd 2>&1 | tee log
실제로이류 cmd 2>&1 | tee log
(그리고 둘 다 cmd
의 합 tee
). 타이밍을 맞추고 cmd
stdout 및 stderr cmd
및 time
출력을 파이프로 리디렉션하려면 tee
다음이 필요합니다.
{ time cmd; } 2>&1 | tee log
주기적 검색은 불가능하다고 생각합니다. 이는 커널에 의해 계산되며 상위 프로세스가 종료된 후 상위 프로세스에서 사용할 수 있습니다.잠깐()ed해당 하위 항목( 사용 getrusage()
)
time
또한, 부모가 기다리지 않은 손자의 이용은 init
신고 시점에 사망한 경우에도 집계되지 않습니다(실제로 집계됩니다).
프로세스는 자신의내 자신의time
사용 정보(예: alone in 의 출력 참조 zsh
). 그러나 해당 children
섹션의 경우 직계 자녀가 사망하고 사용량을 보고할 때만 증가하므로 make
백그라운드에서 시작하고 time
주기적으로 실행 종료하는 하위 항목이 증가됩니다. (표시된 커널)은 이러한 하위 키의 사용량을 계산하며 누적 사용량은 반환 시에만 사용할 수 있습니다.children
make
make
make
zsh
make
CPU 시간에만 관심이 있고 getrusage()
변경 후 추적 및 보고되는 다른 정보에는 관심이 없는 경우 Linux에서는time
$TIMEFMT
/proc/pid/stat
다음에서 정보 와 일부 요약을 얻을 수 있습니다.ps
, 하지만 그것은어린이들을위한특정 프로세스에 대해 종료된 직계 하위 프로세스의 누적 사용량만 포함됩니다.
그것은 다음과 같습니다:
time cmd &
perl -MPOSIX -l -0777 -e '
while (<STDIN>) {
@f = /\(.*\)|\S+/gs;
printf "%s %s cutime: %.2f cstime: %.2f\n",
strftime("%T",localtime), $f[1],
map {$_/POSIX::sysconf( &POSIX::_SC_CLK_TCK )}@f[15,16];
sleep 1;
seek STDIN,0,0;
}' < /proc/$!/stat
실행 프로세스의 각 직계 하위 프로세스가 종료되고 종료되는 경우에만 cutime
(누적 사용자 시간) 및 (시스템) 증가가 표시됩니다.cstime
cmd
cmd
기다리다그들을 위해.
예제 출력은 zsh -c 'repeat 5 {head -c200M /dev/zero | pixz > /dev/null}'
다음과 같습니다.cmd
:
15:19:32 (zsh) cutime: 0.00 cstime: 0.00
15:19:33 (zsh) cutime: 0.00 cstime: 0.00
15:19:34 (zsh) cutime: 0.05 cstime: 0.25
15:19:35 (zsh) cutime: 0.05 cstime: 0.25
15:19:36 (zsh) cutime: 19.21 cstime: 1.04
15:19:37 (zsh) cutime: 19.21 cstime: 1.04
15:19:38 (zsh) cutime: 19.21 cstime: 1.04
15:19:39 (zsh) cutime: 19.26 cstime: 1.31
15:19:40 (zsh) cutime: 37.94 cstime: 2.05
15:19:41 (zsh) cutime: 37.94 cstime: 2.05
15:19:42 (zsh) cutime: 37.97 cstime: 2.36
15:19:43 (zsh) cutime: 37.97 cstime: 2.36
15:19:44 (zsh) cutime: 57.17 cstime: 3.07
15:19:45 (zsh) cutime: 57.17 cstime: 3.07
15:19:46 (zsh) cutime: 57.22 cstime: 3.36
15:19:47 (zsh) cutime: 76.06 cstime: 4.10
15:19:48 (zsh) cutime: 76.06 cstime: 4.10
15:19:49 (zsh) cutime: 76.06 cstime: 4.10
15:19:50 (zsh) cutime: 76.08 cstime: 4.42
시간 배치가 증가하는 것을 볼 수 있습니다( 프로세스가 종료되는 시기 head
와 시기).pigz