Saya ingin tahu kapan proses yang berjalan akan berakhir. Bagaimana saya bisa menontonnya?


14

Saya ingin tahu perintah apa saja yang bisa saya jalankan untuk mengetahui waktu akhir suatu proses.

Saya sudah meluncurkan proses dan tahu PID-nya, tetapi saya ingin tahu apakah ada perintah yang dapat memberi tahu saya kapan waktu itu berakhir.

Terima kasih atas bantuan Anda.


7
Pertanyaan menarik. Bagaimanapun, lain kali Anda menjalankan perintah yang membutuhkan waktu lama, pertimbangkan untuk menggunakan at(lihat halaman manual:) man at. Ini akan mengantrikannya sebagai pekerjaan, Anda akan diberi tahu kapan selesai, dll. Ini sangat mendasar, seperti Cron, tetapi untuk satu bidikan pekerjaan.
gertvdijk

Jawaban:


11

Jalankan ini:

while kill -0 <PID>; do sleep 1; done; echo "Process finished at $(date +"%F %T")."

Atau Anda dapat membuat skrip bash. wait-for-death.sh:

#!/bin/bash

if ! kill -0 $1; then
    echo "Process $1 doesn't exist."
    exit 1
fi

while kill -0 $1; do
    sleep 1
done

echo "Process $1 finished at $(date +"%F %T")."

Kemudian berikan izin eksekusi:

chmod +x wait-for-death.sh

dan jalankan melalui proses PID:

./wait-for-death.sh <PID>

while kill -0 <pid>; do ...lebih portabel - ini akan bekerja pada sistem non-Linux juga. Dan tidak ada alasan untuk menggunakan bash - kode Anda tidak menggunakan bashisme apa pun jadi /bin/shtidak masalah di sini.
Richard Hansen

1
@RichardHansen situs ini tentang Ubuntu, ini bukan StackOverflow.
hytromo

@RichardHansen Terima kasih kill -0, saya pikir ini solusi yang lebih elegan.
Eric Carvalho

@hakermania: Saya mengerti, itulah sebabnya saya masih memberi +1. Saya baru saja menunjukkan beberapa cara untuk membuat skrip lebih portabel jika seseorang ingin melakukan hal yang sama pada BSD / Solaris / etc. sistem. Saya percaya bahwa itu adalah ide yang baik untuk tetap berpegang pada POSIX kecuali ada alasan untuk melakukan sesuatu yang spesifik Ubuntu. Dalam hal ini, tidak ada alasan untuk tidak menulis skrip POSIX-conformant.
Richard Hansen

2

Jika Anda ingin menghindari tabrakan PID, Anda dapat menggunakan at:

job_id=$(at now <<< 'sleep 10' 2>&1 | awk 'END {print $2}')
while at -l | grep -q "^${job_id}\s"
do
    sleep 1
done
echo "Process finished at $(date)"

0

Mungkin perintah itu timesesuai dengan kebutuhan Anda:

time [options] command [arguments...]

Contoh:

time /local/usr/bin/myProcess arg1 arg2

Setelah proses selesai timeakan menunjukkan beberapa statistik seperti waktu yang dibutuhkan untuk menyelesaikan proses (dalam beberapa detik saya pikir).

Periksa halaman manual atau lihat halaman manual online ini .


OP mengatakan dia "sudah meluncurkan prosesnya", jadi timebukan pilihan.
Eric Carvalho
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.