Bash 참조 매뉴얼에 따르면
time
쉘 내장, 쉘 기능 및 파이프의 타이밍을 허용하려면 예약어로 사용하십시오 . 외부 명령time
으로는 쉽게 시간을 측정할 수 없습니다 .
외부 명령으로 시간을 측정할 수 있는 것은 무엇입니까
time
?그냥 간단한 외부 명령인가요? 다른 사람은 없어?
다른 일의 타이밍을 맞추는 것을 방지하는 규칙은 무엇입니까? 이 규칙은 쉘(bash)에 속합니까, 아니면 외부 명령 실행에 속합니까
time
?그런데 저는 Ubuntu를 실행하고 있으므로
time
Debian에서 실행하고 있습니다.Bash의 예약어는
time
실행될 수 있는 모든 것의 시간을 측정할 수 있나요? 그렇지 않다면 언제 할 수 없습니까?time
외부적으로 시간을 측정할 수 있지만 예약어time
로는 시간을 측정할 수 없는 것은 무엇입니까 ?
답변1
내 대답은 Linux에 관한 것입니다.
- 다른 일의 타이밍을 맞추는 것을 방지하는 규칙은 무엇입니까?
내 생각엔 그럴 것 같아시간 정보wait4
실제로 이 값을 얻기 위해 시스템 호출을 사용하므로 프로세스에 대해서만 작동합니다.시간 정보. 첫 번째 매개변수 wait4
는 프로세스의 pid입니다. 그러니 /usr/bin/time
항상 전화 execve
하고 기다리세요 4.
덧붙여서:
execve()는 파일 이름이 가리키는 프로그램을 실행합니다. 파일 이름은 바이너리 실행 파일이거나 #!interpreter [선택적 인수] 형식의 줄로 시작하는 스크립트여야 합니다.
따라서 /usr/bin/time에는 실행 가능한 것이 필요합니다.execve
- Bash의 예약어 시간을 실행 가능한 모든 시간을 측정하는 데 사용할 수 있나요?
그런 것 같아요. 이는 두 가지 호출 세트로 구현됩니다.
10:06:03 getrusage(RUSAGE_SELF, {ru_utime={0, 152976}, ru_stime={0, 465929}, ru_maxrss=4052, ru_ixrss=0, ru_idrss=0, ru_isrss=0, ru_minflt=6214, ru_majflt=1, ru_nswap=0, ru_inblock=368, ru_oublock=0, ru_msgsnd=0, ru_msgrcv=0, ru_nsignals=0, ru_nvcsw=6349, ru_nivcsw=12}) = 0
10:06:03 getrusage(RUSAGE_CHILDREN, {ru_utime={2, 259656}, ru_stime={1, 888712}, ru_maxrss=21176, ru_ixrss=0, ru_idrss=0, ru_isrss=0, ru_minflt=64297, ru_majflt=4, ru_nswap=0, ru_inblock=272, ru_oublock=368, ru_msgsnd=0, ru_msgrcv=0, ru_nsignals=0, ru_nvcsw=56077, ru_nivcsw=386}) = 0
명령 또는 내장 명령 실행
10:06:04 getrusage(RUSAGE_SELF, {ru_utime={0, 152976}, ru_stime={0, 476927}, ru_maxrss=4052, ru_ixrss=0, ru_idrss=0, ru_isrss=0, ru_minflt=6243, ru_majflt=1, ru_nswap=0, ru_inblock=368, ru_oublock=0, ru_msgsnd=0, ru_msgrcv=0, ru_nsignals=0, ru_nvcsw=6399, ru_nivcsw=13}) = 0
10:06:04 getrusage(RUSAGE_CHILDREN, {ru_utime={2, 271654}, ru_stime={1, 903710}, ru_maxrss=21176, ru_ixrss=0, ru_idrss=0, ru_isrss=0, ru_minflt=64514, ru_majflt=4, ru_nswap=0, ru_inblock=272, ru_oublock=368, ru_msgsnd=0, ru_msgrcv=0, ru_nsignals=0, ru_nvcsw=56079, ru_nivcsw=406}) = 0
bash
그래서 차이를 계산해서 인쇄하고 싶습니다 . 이런 방식으로 자체 내장 또는 하위 프로세스와 같은 모든 것을 측정할 수 있습니다.
- 외부 시간으로 측정할 수 있지만 예약어 시간으로는 측정할 수 없는 것은 무엇입니까?
사실, 그것들은 모두 시스템 호출 getrusage
이고 wait4
커널에서 얻어집니다.구조 사용법. 그러나 bash time
이 구조에서는 제한된 수의 필드가 인쇄됩니다. 출처 man 1 time
:
참고: 일부 쉘(예: bash(1))에는 여기에 설명된 것보다 적은 기능을 제공하는 내장 시간 명령이 있습니다.
$/usr/bin/time -v seq 10000
Command being timed: "seq 10000"
User time (seconds): 0.01
System time (seconds): 0.01
Percent of CPU this job got: 24%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.12
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 2640
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 199
Voluntary context switches: 8
Involuntary context switches: 24
Swaps: 0
File system inputs: 0
File system outputs: 8
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0