Shell-Script
如何分析 shell 腳本?
我有幾個在 shell 腳本中執行的程序:
./myprogram1 ./myprogram2 ...
我知道我可以通過編輯原始碼來分析每個單獨的程序,但我想知道是否有一種方法可以通過分析腳本本身來測量執行的總時間。有沒有可以用於此目的的計時器程序?如果是這樣,它的測量精度如何?
按照 Jon Lin 的建議使用時間開始:
$ time ls test test real 0m0.004s user 0m0.002s sys 0m0.002s
你沒有說你的腳本在哪個 unix 上執行,但 strace 在 linux 上,在 Solaris/AIX 上 truss,我認為 hp-ux 上的 tusc 讓你了解很多關於程序在做什麼的知識。我喜歡 strace 的 -c 選項來得到一個很好的總結:
]$ strace -c ls test % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 89.19 0.000998 998 1 execve 10.81 0.000121 121 1 write 0.00 0.000000 0 12 read 0.00 0.000000 0 93 79 open 0.00 0.000000 0 16 close 0.00 0.000000 0 2 1 access 0.00 0.000000 0 3 brk 0.00 0.000000 0 2 ioctl 0.00 0.000000 0 4 munmap 0.00 0.000000 0 1 uname 0.00 0.000000 0 6 mprotect 0.00 0.000000 0 2 rt_sigaction 0.00 0.000000 0 1 rt_sigprocmask 0.00 0.000000 0 1 getrlimit 0.00 0.000000 0 30 mmap2 0.00 0.000000 0 8 7 stat64 0.00 0.000000 0 13 fstat64 0.00 0.000000 0 2 getdents64 0.00 0.000000 0 1 fcntl64 0.00 0.000000 0 1 futex 0.00 0.000000 0 1 set_thread_area 0.00 0.000000 0 1 set_tid_address 0.00 0.000000 0 1 set_robust_list 0.00 0.000000 0 1 socket 0.00 0.000000 0 1 1 connect ------ ----------- ----------- --------- --------- ---------------- 100.00 0.001119 205 88 total
另請注意,附加這些跟踪類型的程序可能會降低程序的速度。