Làm thế nào tôi có thể có được thời gian đồng hồ treo tường của một quá trình đang chạy?


14

Tôi đã bắt đầu kiểm tra băm của một tệp lớn và không muốn khởi động lại bằng cách sử dụng time. Làm thế nào tôi có thể có được thời gian đồng hồ treo tường mà không sử dụng thời gian lúc đầu hoặc sử dụng datengay trước khi tôi gọi lệnh?

Câu trả lời:


12

Đối với một quy trình đang chạy, bạn có thể làm điều này:

PID=5462
command ps -p "$PID" -o etime
command ps -p "$PID" --no-headers -o etime

Là một tính năng chung, bạn có thể sửa đổi nhắc nhở shell của bạn. Đây là định nghĩa nhắc bash của tôi:

TERM_RED_START=$'\033[1m\033[31m'
TERM_RED_END=$'\033(B\033[m'
PS1='\nec:$(ec=$?; if [ 0 -eq $ec ];
then printf %-3d $ec;
else echo -n "$TERM_RED_START"; printf %-3d $ec; echo "$TERM_RED_END";
fi) \t  \u@\h:\w\nstart cmd:> '
PS2="cont. cmd:> "

Phần có liên quan cho bạn là \tthời gian.

Điều này không giải quyết tất cả các vấn đề, mặc dù. Dấu nhắc mới sẽ hiển thị khi quá trình kết thúc nhưng dấu nhắc cũ có thể đã khá cũ khi lệnh cần đo được bắt đầu. Vì vậy, hoặc bạn nhớ làm mới lời nhắc trước khi bắt đầu các lệnh chạy dài hoặc bạn phải nhớ thời gian hiện tại khi bạn muốn biết quá trình hiện tại sẽ mất bao lâu.

Đối với một giải pháp hoàn chỉnh, bạn cần một tính năng kiểm toán (ghi lại thời gian bắt đầu và kết thúc của các quy trình). Nhưng điều đó có thể gây ra một lượng dữ liệu khổng lồ nếu nó không thể bị giới hạn trong hệ vỏ.


1

Dựa trên câu trả lời được chấp nhận, bạn cũng có thể liên tục theo dõi thời gian đã trôi qua của một quy trình đang chạy bằng cách sử dụng watch:

PID=5462
watch command ps -p "$PID" -o etime
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.