Bashリファレンスマニュアルによると
time
シェルの組み込み、シェル機能、パイプのタイミングを許可するには、予約語として使用してください。外部コマンドtime
では簡単に時間を測定できません。
外部コマンドで時間を測定できるのは何ですか
time
?ただ単純な外部コマンドですか?他の人はいませんか?
他の仕事のタイミングを合わせることを防ぐルールは何ですか?このルールはシェルに属していますか、それとも外部コマンドの実行に属していますか
time
?しかし、私はUbuntuを実行しているので、
time
Debianで実行しています。Bashの予約語は、
time
実行できるすべてのものの時間を測定できますか?そうでなければいつできませんか?time
外部で時間を測定できますが、予約語time
では時間を測定できないものは何ですか?
答え1
私の答えはLinuxについてです。
- 他の仕事のタイミングを合わせることを防ぐルールは何ですか?
私の考えではそうだと思います。時間情報wait4
実際には、この値を取得するためにシステムコールを使用するため、プロセスに対してのみ機能します。時間情報。最初のパラメータwait4
はプロセスのpidです。だから/usr/bin/time
いつも電話execve
して待ってください。
ちなみに:
execve() はファイル名を指すプログラムを実行します。ファイル名はバイナリ実行可能ファイルまたは#!interpreter [オプションの引数]形式の行で始まるスクリプトでなければなりません。
したがって、/usr/bin/timeには実行可能なものが必要です。execve
- Bashの予約語時間を実行可能なすべての時間を測定するために使用できますか?
そうだと思います。これは 2 つの呼び出しセットで実装されます。
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