Bagaimana cara memeriksa berapa lama proses berjalan setelah selesai?

13

Saat ini saya menggunakan yang berikut untuk memeriksa berapa lama sebenarnya proses berjalan:

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

Dan itu menghasilkan sebagai berikut:

MY_ID PID_OF_PROCESS       00:16

Namun, setelah proses berakhir saya ingin mencari tahu berapa lama itu sebenarnya berjalan tetapi saya tidak dapat menemukan informasi itu.

Diego
sumber

Jawaban:

14

Saya rasa tidak mungkin mendapatkan informasi seperti itu setelah prosesnya selesai.

Jika Anda tahu sebelumnya bahwa Anda akan memerlukan informasi itu, Anda dapat menjalankan perintah sebagai

time <command>

misalnya

~> time sleep 1

real        0m1.003s
user        0m0.002s
sys         0m0.001s
Petr Uzel
sumber
7

Periksa apakah varian unix Anda mendukung proses akuntansi . Misalnya, di Ubuntu (dan sebagian besar distribusi Linux lainnya), ini disediakan oleh acctpaket Install acct http://bit.ly/software-small . Jika subsistem akuntansi aktif dan berjalan, maka lastcommmenunjukkan informasi tentang proses yang sudah selesai, termasuk berapa banyak waktu prosesor yang mereka gunakan (waktu jam dinding tidak merekam).

Jika Anda membutuhkan pengaturan waktu untuk program tertentu, ikuti sajatime .

Jika Anda memerlukan informasi yang lebih tepat, gunakan paket audit yang lebih bagus, misalnya subsistem audit di Linux.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Jawaban ini telah kehilangan citranya.
mattdm
@mattdm Oh, itu link yang adalah standar pada Tanyakan Ubuntu untuk menghubungkan ke apt.ubuntu.com, dan kemudian gambar mendapat dihapus dari Imgur. Saya harus menggunakannya ratusan kali di seluruh SE dan saya tidak menikmati prospek untuk mengedit semuanya. Saya masih bertahan untuk SE melakukan penggantian otomatis, yang tidak akan mereka lakukan karena mereka bahkan tidak melakukannya ketika semua dokumentasi Java dipindahkan.
Gilles 'SO- berhenti bersikap jahat'
1

Sebelum saya melihat pertanyaan ini dan jawabannya, saya membuat skrip bash kecil. Ini masih berguna, jika Anda tidak memiliki hak root dan acct tidak diinstal atau Anda tidak menjalankan perintah Anda secara langsung (dalam kasus saya: Saya menggunakan gui untuk mengatur proses latar belakang). Anda perlu mendapatkan PID sebelum menjalankan (ada yang tertarik untuk menambahkannya ke dalam skrip? :)

#!/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

Dengan ini, cari PID PROCESS_NAME

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

Sebenarnya saya mencoba menggabungkan USER-ID dan PID untuk membuat skrip menjadi non-ambisius, tetapi itu tidak mudah ... ps -eo uid,pid,etime | egrep '$UID[[:space:]]$PID'sepertinya tidak selalu berfungsi ...

PythoNic
sumber
Apa yang saya butuhkan! Saya menemukan bahwa pada Centos 6.8 saya harus menghilangkan tanda kutip di sekitar '$ PID' dan lewati egrep '$UID'karena saya adalah satu-satunya pengguna seperti itu:ps -eo uid,pid,etime | egrep $PID
Chris Adams