ฉันจะวัดเวลาดำเนินการของกระบวนการเทอร์มินัลได้อย่างไร


160

ฉันพยายามวัดเวลาดำเนินการของกระบวนการที่ฉันเรียกใช้ผ่านบรรทัดคำสั่ง (เช่นฉันต้องการค้นหาระยะเวลาที่กระบวนการจะเสร็จสิ้น) มีคำสั่งใดบ้างที่ฉันสามารถเพิ่มลงในคำสั่งที่เรียกกระบวนการที่จะบรรลุผลนี้ได้หรือไม่?

คำตอบ:


197

เพิ่มtimeก่อนคำสั่งที่คุณต้องการวัด ตัวอย่างเช่นtime ls.

ผลลัพธ์จะมีลักษณะดังนี้:

real    0m0.606s
user    0m0.000s
sys     0m0.002s

ชี้แจงreal, userและsys(จากman time):

  • real: เวลาที่ผ่านไปจริง (นาฬิกาแขวนผนัง) ที่ใช้โดยกระบวนการในหน่วยวินาที
  • user: จำนวน CPU-วินาทีทั้งหมดที่กระบวนการใช้โดยตรง (ในโหมดผู้ใช้) เป็นวินาที
  • sys: จำนวน CPU-วินาทีทั้งหมดที่ระบบใช้ในนามของกระบวนการ (ในโหมดเคอร์เนล) เป็นวินาที

1
@ninjalj คุณสามารถให้ข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่เป็นreal, userและsysครั้งที่คำสั่งนี้คืนหรือไม่
Christopher Kyle Horton

2
@JacobVlijm คำตอบนี้ไม่ได้อธิบายอย่างละเอียด :) คุณสามารถแก้ไขในความคิดเห็นของคุณและทำให้มัน
muru

1
โปรดทราบว่าคุณอาจจำเป็นต้องใช้sudo apt-get install timeถ้าคุณใช้เปลือกที่timeไม่ได้อยู่ในตัว
poolie

1
โปรดทราบว่านี่เป็นผลลัพธ์จาก Bash ของtimeบิวด์อิน แต่man timeจะเกี่ยวกับความสามารถในการใช้งาน (เช่น/usr/bin/timeจากtimeแพ็คเกจ) และเอาต์พุตของมันจะดูแตกต่างออกไป นอกจากนี้ใน Bash คุณสามารถhelp timeขอความช่วยเหลือจาก builtin ได้
wjandrea

โปรดทราบว่าการสิ้นสุดกระบวนการไม่ได้หมายความว่างานทั้งหมดจะเสร็จสิ้น สำเนาอาจใช้เวลานาทีเพิ่มเติมหลังจาก "เวลา" ส่งคืนสำหรับการล้างข้อมูลบัฟเฟอร์ของระบบ (เช่นเดียวกับเวลาที่ไม่ได้ถูกจัดสรรด้วยเช่นกัน)
ubfan1

43

สำหรับบรรทัดโดยบรรทัดวัดเดลต้าพยายามแสงแดด

มันเป็นยูทิลิตี้บรรทัดคำสั่ง, บิตเช่น ts moreutils ของ, เพื่อเตรียมข้อมูลการประทับเวลาไปยังเอาต์พุตมาตรฐานของคำสั่งอื่น มีประโยชน์สำหรับกระบวนการที่ใช้เวลายาวนานซึ่งคุณต้องการให้บันทึกประวัติของสิ่งที่ใช้เวลานาน

การส่งทุกอย่างไปที่ gnomon จะเป็นการเพิ่มเวลาประทับให้กับแต่ละบรรทัดเพื่อระบุว่าบรรทัดนั้นเป็นบรรทัดสุดท้ายในบัฟเฟอร์ - นั่นคือระยะเวลาที่บรรทัดถัดไปปรากฏ โดยค่าเริ่มต้น gnomon จะแสดงวินาทีที่ผ่านไประหว่างแต่ละบรรทัด แต่ที่สามารถกำหนดค่าได้

การสาธิต gnomon


2
นี่มันค่อนข้างเนียน
Nathan Arthur

1
(พิมพ์ผิดในลิงค์โชคดีที่ตกลง ok) คุณสามารถติดตั้งได้กับถ้าคุณมีsudo npm i gnomon -g npmไม่แน่ใจว่ามันขัดกับ "ความคืบหน้า" ได้ดีเพียงใดโดยใช้ '\ r' (อยู่ในบรรทัดเดียวกัน): ในกรณีนี้ฉันต้องการให้นับทั้งหมดเป็นหนึ่งบรรทัดยาวไม่ใช่แยกกัน
Tomasz Gandor

ดังนั้นเราจึงส่งไปยัง gnomon! แค่นั้นแหละ ?
Ciasto piekarz


8
date +"%T" && cp -r ./file  /destination/folder/here && date +"%T"

การรันคำสั่งนี้ในเทอร์มินัลจะทำให้คุณมีเวลาโดยรวมในการจัดการไฟล์


นี่จะให้เวลาเริ่มต้นและเวลาสิ้นสุดไม่ใช่ระยะเวลา
wjandrea

นี่เป็นคำตอบที่ดีในบางสถานการณ์ ตัวอย่างเช่นfindคำสั่งต่อไปนี้- โดยไม่มีการ2>/dev/nullเปลี่ยนเส้นทาง - ให้ข้อความมากมาย Permission deniedอย่างไรก็ตามการเพิ่ม2>/dev/nullคำสั่งนั้นจะแบ่งtimeส่วนของคำสั่งนั้น ต่อไปนี้ให้การประนีประนอมที่ดี: START="$(date +"%s")" && find 2>/dev/null / -path /mnt -prune -o -name "*libname-server-2.a*" -print; END="$(date +"%s")"; TIME="$((END - START))"; printf 'find command took %s sec\n' "$TIME", ให้ (เช่น) /usr/lib/libname-server-2.a find command took 3 sec เป็นผลลัพธ์เพียงอย่างเดียว
Victoria Stuart

ภาคผนวกในความคิดเห็นของฉัน: แน่นอนคุณสามารถเรียกใช้time sudo find / -path /mnt -prune -o -name "*libname-server-2.a*" -print(เช่นเป็นsudo) - หลีกเลี่ยงPermission deniedคำเตือนมากมายเหล่านั้น
Victoria Stuart

4

บางครั้งฉันพบว่าตัวเองต้องการนาฬิกาจับเวลาเพื่อนับว่าต้องใช้เวลานานเท่าใดสำหรับการดำเนินการเช่นการบู๊ตแอปของฉันซึ่งในกรณีนี้วิธีแก้ปัญหามากมายที่นี่ไม่มีประโยชน์

สำหรับเรื่องนี้ผมชอบที่จะใช้sw

SW

ติดตั้ง

wget -q -O - http://git.io/sinister | sh -s -- -u https://raw.githubusercontent.com/coryfklein/sw/master/sw

การใช้

sw
 - start a stopwatch from 0, save start time in ~/.sw
sw [-r|--resume]
 - start a stopwatch from the last saved start time (or current time if no last saved start time exists)
 - "-r" stands for --resume

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.