เมื่อใช้คำสั่งstrace
กับการตั้งค่าสถานะ-T
ฉันต้องการที่จะรู้ว่าหน่วยเวลาที่ใช้ในการแสดงเวลาที่ใช้ใน syscalls คืออะไร? ฉันคิดว่ามันควรจะเป็นในไม่กี่วินาที แต่ฉันไม่แน่ใจและดูเหมือนว่าจะถูกตัดออกจากคู่มือ
เมื่อใช้คำสั่งstrace
กับการตั้งค่าสถานะ-T
ฉันต้องการที่จะรู้ว่าหน่วยเวลาที่ใช้ในการแสดงเวลาที่ใช้ใน syscalls คืออะไร? ฉันคิดว่ามันควรจะเป็นในไม่กี่วินาที แต่ฉันไม่แน่ใจและดูเหมือนว่าจะถูกตัดออกจากคู่มือ
คำตอบ:
จากซอร์สโค้ด :
if (Tflag) {
ts_sub(ts, ts, &tcp->etime);
tprintf(" <%ld.%06ld>",
(long) ts->tv_sec, (long) ts->tv_nsec / 1000);
}
ซึ่งหมายความว่าเวลาจะแสดงเป็นวินาทีโดยมีไมโครวินาที (คำนวณจากค่านาโนวินาที) หลังจุดทศนิยม
ถ้าคุณวิ่ง
strace -T sleep 2
แล้วคุณจะได้เห็น
nanosleep({tv_sec=2, tv_nsec=0}, NULL) = 0 <2.000230>
ดังนั้นดูเหมือนว่าเวลาที่ใช้ในหน่วยวินาที
หากคุณรันคำสั่งstrace
โดยใช้ "flag -c" คำสั่งจะแสดงตารางและเวลาจะรายงานในไม่กี่วินาที :
strace -c -p 3569 # 3569 is PID
strace: Process 3569 attached
^Cstrace: Process 3569 detached
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
99.73 0.016000 8 1971 poll
0.16 0.000025 0 509 75 futex
0.06 0.000010 0 1985 1966 recvmsg
0.06 0.000009 0 2336 mprotect
0.00 0.000000 0 478 read
0.00 0.000000 0 13 write
0.00 0.000000 0 29 mmap
0.00 0.000000 0 9 munmap
0.00 0.000000 0 18 writev
0.00 0.000000 0 351 madvise
0.00 0.000000 0 1 restart_syscall
------ ----------- ----------- --------- --------- ----------------
100.00 0.016044 7700 2041 total
-ค
นับเวลาการโทรและข้อผิดพลาดสำหรับการเรียกระบบแต่ละครั้งและรายงานสรุปการออกจากโปรแกรม บน Linux สิ่งนี้จะพยายามแสดงเวลาของระบบ (เวลา CPU ที่ใช้ในเคอร์เนล) โดยไม่ขึ้นกับเวลาของนาฬิกาแขวน หากใช้ -c กับ -f หรือ -F (ด้านล่าง) จะมีการเก็บยอดรวมรวมสำหรับกระบวนการที่ติดตามทั้งหมดเท่านั้น