Làm thế nào để kiểm tra bao lâu một quá trình chạy sau khi nó kết thúc?


13

Hiện tại tôi đang sử dụng các cách sau để kiểm tra xem một quá trình thực sự đang chạy trong bao lâu:

ps -eo uid,pid,etime | egrep '^ *MY_ID' | egrep 'PID_OF_PROCESS'

Và kết quả như sau:

MY_ID PID_OF_PROCESS       00:16

Tuy nhiên, sau khi quá trình kết thúc, tôi muốn tìm hiểu xem nó thực sự kéo dài bao lâu nhưng dường như tôi không thể tìm thấy thông tin đó.

Câu trả lời:


14

Tôi không nghĩ có thể có được thông tin như vậy sau khi quá trình đã kết thúc.

Nếu bạn biết trước rằng bạn sẽ cần thông tin đó, bạn có thể chạy lệnh như

time <command>

ví dụ

~> time sleep 1

real        0m1.003s
user        0m0.002s
sys         0m0.001s

7

Kiểm tra nếu biến thể unix của bạn hỗ trợ kế toán quá trình . Ví dụ: trên Ubuntu (và hầu hết các bản phân phối Linux khác), điều này được cung cấp bởi acctgói Cài đặt acct http://bit.ly/software-small . Nếu hệ thống con kế toán hoạt động, sau đó lastcommhiển thị thông tin về các quy trình đã hoàn thành, bao gồm thời gian xử lý mà chúng sử dụng (thời gian đồng hồ treo tường không ghi).

Nếu bạn cần thời gian cho một chương trình cụ thể, hãy gọi nó quatime .

Nếu bạn cần thông tin chính xác hơn, hãy sử dụng gói kiểm toán fancier, ví dụ hệ thống con kiểm toán trong Linux.


Câu trả lời này đã mất hình ảnh của nó.
mattdm

@mattdm Ồ, đó là liên kết mà tiêu chuẩn trên Hỏi Ubuntu cho liên kết đến apt.ubuntu.com, và sau đó là hình ảnh đã bị xóa từ imgur. Tôi đã phải sử dụng nó hàng trăm lần trên khắp SE và tôi không thích triển vọng chỉnh sửa tất cả. Tôi vẫn đang đề nghị SE thực hiện thay thế tự động, điều mà họ sẽ không làm vì họ thậm chí không làm điều đó khi tất cả các tài liệu Java đã di chuyển.
Gilles 'SO- ngừng trở thành ác quỷ'

1

Trước khi tôi thấy câu hỏi này và câu trả lời của nó, tôi đã tạo ra một kịch bản bash nhỏ. Điều này vẫn hữu ích, nếu bạn không có quyền root và acct chưa được cài đặt hoặc bạn không gọi lệnh trực tiếp (trong trường hợp của tôi: Tôi sử dụng gui để thiết lập các quy trình nền). Bạn cần phải có được PID trước khi chạy (có ai quan tâm đến việc thêm nó vào tập lệnh không? :)

#!/bin/bash

echo "Checking run time"
read -p "What is the pid? " PID

while true; do
    # sleep needed! used to reduce cpu usage and mass of output
    sleep 5
    ps -eo uid,pid,etime | egrep '$PID' | egrep '$UID'
done

Với điều này, hãy tìm PID của PROCESS_NAME

ps aux | awk 'NR == 1 || /PROCESS_NAME/'

Trên thực tế, tôi đã cố gắng kết hợp ID người dùng và PID để làm cho tập lệnh không bị lỗi thời, nhưng nó không dễ dàng ps -eo uid,pid,etime | egrep '$UID[[:space:]]$PID'như vậy ... dường như không hoạt động luôn ...


Đúng thứ tôi cần! Tôi thấy rằng trên Centos 6.8, tôi cần bỏ qua các trích dẫn xung quanh '$ PID' và bỏ qua egrep '$UID'vì tôi là người dùng duy nhất như vậy:ps -eo uid,pid,etime | egrep $PID
Chris Adams
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.