Tìm thời gian thực hiện lệnh trong nhận thức muộn


22

Tôi vừa thực hiện một quy trình dài từ dấu nhắc bash. Nhìn nhận lại, tôi ước mình chạy timetrên nó, hoặc ghi lại thời gian tôi khởi động nó.

Có cách nào để có được thông tin này hồi cứu? Các .bash_historydường như không bao gồm timestamps.

Trong trường hợp cụ thể của tôi, đó là Mac OS X, nhưng tôi quan tâm đến các giải pháp Unix / Linux nói chung.

Để làm rõ, quy trình hiện đã hoàn tất và tôi không muốn chạy lại trừ khi thực sự cần thiết!


Tôi cũng luôn quên điều này và tôi đã cấu hình lời nhắc của mình để hiển thị thời gian.
toán

Câu trả lời:


23

bash thực sự nhớ những lần cho đến khi bạn đóng vỏ.

Vì vậy, hãy thử chạy

HISTTIMEFORMAT='%x %X ' history

Nếu bạn cũng đặt

HISTTIMEFORMAT=<some format>

trong của bạn ~/.bashrc, nó cũng sẽ được ghi ~/.bash_historyvào lối ra, vì vậy bạn cũng có thể kiểm tra những gì đã xảy ra trong các phiên shell trước đó.


Tuyệt vời Mike, thậm chí không nghĩ rằng điều này là có thể.
Tim

9

Câu trả lời của Mikel là tốt, ngoại trừ việc nếu bạn chạy chương trình và biến mất một lúc, bạn thực sự không thể chắc chắn khi quá trình kết thúc. Vì vậy, ngay cả khi bạn có thời gian khi bạn bắt đầu chương trình, bạn cũng không biết nó đã mất bao nhiêu thời gian.

Tôi không có giải pháp cho trường hợp khi bạn cần tìm hiểu mà không cần chuẩn bị. Tuy nhiên nếu bạn sẽ làm điều đó một lần nữa, bạn có thể làm như tôi: in thời gian hiện tại cùng với dấu nhắc shell. Bằng cách đó, nếu bạn vẫn mở thiết bị đầu cuối, bạn có thể thấy thời gian khi bạn khởi động chương trình và thời gian khi lời nhắc tiếp theo được in. Một chút toán sẽ giúp bạn có thời gian thực hiện.

Để làm điều này bash, hãy đặt nó trong .bashrc:

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

Trong zsh, đặt điều này trong .zshrc:

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

Ở trên sẽ cung cấp cho shell của bạn một định dạng <time> <username>@<hostname> <current dir> <$ or % or #>. Đối với các shell khác nhau và các gợi ý lạ mắt điên rồ , hãy đọc trang man của shell của bạn.

Lưu ý: điều này có thể sẽ không hữu ích nếu bạn cần độ chính xác cao hoặc nếu chương trình tạo ra nhiều đầu ra mà bạn không thể thấy lời nhắc trước đó.


2
Tôi bao gồm dấu thời gian trong dấu nhắc shell của mình vì lý do này, nhưng hãy cẩn thận rằng thời gian hiển thị trong lời nhắc là khi lời nhắc được in, có thể khác hoàn toàn với thời gian bạn thực sự gõ xong và nhấn enter để bắt đầu lệnh. Nói cách khác, hãy nhớ tự tính đến "thời gian nhàn rỗi".
jw013

5

Nếu quá trình vẫn đang chạy, bạn có thể sử dụng psđể lấy thời gian bắt đầu và thời gian CPU đã sử dụng.

Ví dụ: cho tất cả các quy trình:

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

Đối với một pid cụ thể (12345):

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

Cảm ơn, nhưng quá trình đã hoàn thành. Tôi sẽ ghi nhớ điều này nếu tôi chạy lại nó.
Graham Borland

Tôi đang sử dụng GNU pstrong linux, pstrong MacOSX có thể là BSD và tôi không chắc chắn về các đối số.
jsbillings

Ngoài ra, hãy nhớ rằng thời gian cpu không phải là "thời gian thực"
Juan

4

Lastcomm (nếu kế toán quy trình BSD được bật) sẽ cung cấp cho bạn thời gian thực hiện (trong một số ý nghĩa hạn chế có thể có hoặc không đầy đủ).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.