Bagaimana saya bisa mendapatkan waktu jam dinding dari proses yang berjalan?

14

Saya mulai memeriksa hash dari file besar dan tidak ingin me-restart menggunakan time. Bagaimana saya bisa mendapatkan waktu jam dinding tanpa menggunakan waktu di awal atau menggunakan datetepat sebelum saya memanggil perintah?

Dan S
sumber

Jawaban:

12

Untuk proses yang berjalan Anda dapat melakukan ini:

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

Sebagai fitur umum, Anda dapat memodifikasi prompt shell Anda. Ini adalah definisi bash prompt saya:

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:> "

Bagian yang relevan untuk Anda adalah \tuntuk saat itu.

Ini tidak menyelesaikan semua masalah. Prompt baru akan menunjukkan kapan proses telah berakhir tetapi prompt sebelumnya mungkin sudah cukup lama ketika perintah yang akan diukur dimulai. Jadi Anda ingat untuk memperbarui prompt sebelum memulai perintah yang berjalan lama atau Anda harus mengingat waktu saat ini ketika Anda ingin tahu berapa lama proses saat ini akan diambil.

Untuk solusi lengkap, Anda memerlukan fitur audit (yang mencatat waktu mulai dan berakhirnya proses). Tetapi itu dapat menyebabkan sejumlah besar data jika tidak dapat dibatasi pada shell.

Hauke ​​Laging
sumber
1

Berdasarkan jawaban yang diterima, Anda juga dapat terus memantau waktu yang telah berlalu dari proses yang berjalan menggunakan watch:

PID=5462
watch command ps -p "$PID" -o etime
Landroni
sumber