การค้นหาเวลาดำเนินการคำสั่งด้วยการเข้าใจถึงปัญหาย้อนหลัง


22

ฉันเพิ่งดำเนินการกระบวนการที่ยาวนานจากพรอมต์ bash ในการเข้าใจถึงปัญหาหลังฉันหวังว่าฉันจะใช้timeมันหรือสังเกตเวลาที่ฉันเตะมันออกไป

มีวิธีในการรับข้อมูลนี้ย้อนหลังหรือไม่? .bash_historyดูเหมือนจะไม่รวมถึงการประทับเวลา

ในกรณีของฉันคือ Mac OS X แต่ฉันสนใจโซลูชัน Unix / Linux ทั่วไป

เพื่อชี้แจงกระบวนการนี้เสร็จสมบูรณ์แล้วและฉันไม่ต้องการเรียกใช้อีกครั้งเว้นแต่จำเป็นจริงๆ!


ฉันยังลืมสิ่งนี้อยู่เสมอและฉันได้กำหนดค่าพรอมต์ให้แสดงเวลา
คณิตศาสตร์

คำตอบ:


23

bash จริงๆแล้วจะจดจำเวลาจนกว่าคุณจะปิดเชลล์

ดังนั้นลองวิ่ง

HISTTIMEFORMAT='%x %X ' history

หากคุณยังใส่

HISTTIMEFORMAT=<some format>

ในของคุณ~/.bashrcมันจะถูกเขียนไป~/.bash_historyที่ exit เพื่อให้คุณสามารถตรวจสอบสิ่งที่เกิดขึ้นในเซสชันเชลล์ก่อนหน้านี้ด้วย


ไมค์เจ๋ง ๆ ไม่คิดว่าจะเป็นไปได้
ทิม

9

คำตอบของ Mikel นั้นดียกเว้นว่าถ้าคุณรันโปรแกรมและหายไปครู่หนึ่งคุณจะไม่แน่ใจจริงๆเมื่อกระบวนการเสร็จสิ้น ดังนั้นแม้ว่าคุณจะมีเวลาเมื่อคุณเริ่มโปรแกรมคุณก็ไม่ทราบว่าต้องใช้เวลาเท่าไหร่

ฉันไม่มีวิธีแก้ปัญหาสำหรับกรณีที่คุณต้องการค้นหาโดยไม่ต้องเตรียมการ อย่างไรก็ตามหากคุณกำลังจะทำเช่นนั้นอีกครั้งคุณสามารถทำเช่นฉัน: พิมพ์เวลาปัจจุบันพร้อมกับเปลือกให้ ด้วยวิธีนี้หากคุณยังคงเปิดเครื่องอยู่คุณสามารถดูเวลาที่คุณเริ่มโปรแกรมและเวลาที่พิมพ์พรอมต์ต่อไป คณิตศาสตร์เล็ก ๆ น้อย ๆ จะทำให้คุณได้รับเวลาดำเนินการ

หากต้องการทำสิ่งนี้bashให้ใส่สิ่งนี้ลงใน.bashrc:

export PS1="\A \u@\h \W \$ "

ในzshใส่สิ่งนี้ลงใน.zshrc:

export PS1="%D{%H:%M} %n@%m %1~ %# "

รูปแบบข้างต้นจะให้รูปแบบเปลือกของ<time> <username>@<hostname> <current dir> <$ or % or #>คุณ สำหรับเชลล์ที่แตกต่างกันและพร้อมรับคำแฟนซีที่บ้าคลั่ง ให้อ่าน man page ของเชลล์ของคุณ

หมายเหตุ: สิ่งนี้อาจจะไม่ช่วยถ้าคุณต้องการความแม่นยำสูงหรือหากโปรแกรมสร้างผลลัพธ์มากจนคุณไม่เห็นพรอมต์ก่อนหน้า


2
ฉันรวมการประทับเวลาไว้ในเชลล์พรอมต์ของฉันด้วยเหตุผลนี้ แต่ระวังว่าเวลาที่แสดงในพรอมต์คือเมื่อพิมพ์พรอมต์ซึ่งอาจแตกต่างจากเวลาที่คุณพิมพ์และกด Enter เพื่อเริ่มคำสั่ง กล่าวอีกนัยหนึ่งอย่าลืมคำนึงถึง "เวลาว่างให้พร้อม" ด้วยตัวเอง
jw013

5

หากกระบวนการยังคงทำงานอยู่คุณสามารถใช้psเพื่อเริ่มเวลาและเวลา CPU ที่ใช้ไป

ตัวอย่างเช่นสำหรับกระบวนการทั้งหมด:

ps -eo cputime,start,pid,command,args

สำหรับ pid เฉพาะ (12345):

ps -p 12345 -o cputime,start,pid,command,args

ขอบคุณ แต่กระบวนการเสร็จสมบูรณ์แล้ว ฉันจะจำสิ่งนี้ไว้ในใจถ้าฉันเรียกใช้อีกครั้ง
เกรแฮม Borland

ฉันใช้ GNU psใน linux, psใน MacOSX อาจเป็น BSD และฉันไม่แน่ใจเกี่ยวกับข้อโต้แย้ง
jsbillings

โปรดทราบว่าเวลาซีพียูไม่ใช่ "เรียลไทม์"
Juan

4

lastcomm (หากเปิดใช้งานการบัญชีกระบวนการ BSD) จะให้ระยะเวลาดำเนินการ (ในบางแง่ซึ่งอาจหรืออาจไม่เพียงพอ)

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