Menemukan waktu pelaksanaan perintah di belakang

22

Saya baru saja menjalankan proses yang berjalan lama dari bash prompt. Kalau dipikir-pikir, saya berharap bisa berlari timedi atasnya, atau mencatat waktu di mana saya menendang itu.

Apakah ada cara untuk mendapatkan informasi ini secara retrospektif? The .bash_historytampaknya tidak menyertakan cap waktu.

Dalam kasus khusus saya itu Mac OS X, tapi saya tertarik pada solusi Unix / Linux umum.

Untuk memperjelas, proses sekarang telah selesai, dan saya lebih suka untuk tidak menjalankannya lagi kecuali benar-benar diperlukan!

Graham Borland
sumber
Saya juga selalu lupa ini, dan saya sudah mengkonfigurasi prompt saya untuk menampilkan waktu.
matematika

Jawaban:

23

bash sebenarnya mengingat waktu sampai Anda menutup shell.

Jadi cobalah berlari

HISTTIMEFORMAT='%x %X ' history

Jika Anda juga menaruh

HISTTIMEFORMAT=<some format>

di Anda ~/.bashrc, itu juga akan ditulis ~/.bash_historypada saat keluar, sehingga Anda dapat memeriksa apa yang terjadi di sesi shell sebelumnya juga.

Mikel
sumber
Keren Mike, bahkan tidak berpikir ini mungkin.
Tim
9

Jawaban Mikel baik, kecuali bahwa jika Anda menjalankan program dan pergi untuk sementara waktu, Anda tidak dapat benar-benar yakin ketika proses selesai. Jadi, bahkan jika Anda punya waktu ketika memulai program, Anda tidak tahu berapa banyak waktu yang dibutuhkan.

Saya tidak punya solusi untuk kasus ini ketika Anda perlu mencari tahu tanpa persiapan. Namun jika Anda akan melakukannya lagi, Anda dapat melakukannya seperti saya: cetak waktu saat ini bersama dengan prompt shell. Dengan begitu, jika Anda masih memiliki terminal terbuka, Anda dapat melihat waktu ketika Anda memulai program, dan waktu ketika prompt berikutnya dicetak. Sedikit matematika akan membuat Anda mendapatkan waktu eksekusi.

Untuk melakukan ini bash, letakkan ini di .bashrc:

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

Dalam zsh, letakkan ini di .zshrc:

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

Di atas akan memberikan prompt shell Anda format <time> <username>@<hostname> <current dir> <$ or % or #>. Untuk kerang yang berbeda dan permintaan mewah yang gila , baca halaman manual cangkang Anda.

Catatan: ini mungkin tidak akan membantu jika Anda membutuhkan presisi tinggi, atau jika program menghasilkan begitu banyak output sehingga Anda tidak dapat melihat prompt sebelumnya.

phhehehe
sumber
2
Saya menyertakan stempel waktu pada prompt shell saya untuk alasan ini, tetapi berhati-hatilah karena waktu yang ditampilkan pada prompt adalah ketika prompt dicetak, yang mungkin sangat berbeda dari saat Anda benar-benar selesai mengetik dan menekan enter untuk memulai perintah. Dengan kata lain, ingatlah untuk memperhitungkan "waktu idle yang diminta" sendiri.
jw013
5

Jika prosesnya masih berjalan, Anda dapat menggunakan psuntuk mendapatkan waktu mulai dan berapa banyak waktu CPU telah digunakan.

Misalnya, untuk semua proses:

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

Untuk pid tertentu (12345):

ps -p 12345 -o cputime,start,pid,command,args
jsbillings
sumber
Terima kasih, tetapi prosesnya sudah selesai. Saya akan mengingat ini jika saya menjalankannya lagi.
Graham Borland
Saya menggunakan GNU psdi linux, psdi MacOSX mungkin BSD dan saya tidak yakin dengan argumennya.
jsbillings
Juga, perlu diingat bahwa waktu cpu bukan "waktu nyata"
Juan
4

lastcomm (jika proses akuntansi BSD diaktifkan) akan memberi Anda durasi eksekusi (dalam arti terbatas yang mungkin atau mungkin tidak memadai).

Martin Keegan
sumber