Çalışan bir işlemin ne zaman sona ereceğini bilmek istiyorum. Nasıl izleyebilirim?


14

Bir sürecin bitiş zamanını bilmek için çalıştırabileceğim herhangi bir komutu bilmek istiyorum.

İşlemi zaten başlattım ve PID'sini biliyorum, ancak ne zaman sona erdiğini söyleyebilecek herhangi bir komut olup olmadığını bilmek istiyorum.

Yardımın için teşekkürler.


7
İlginç soru. Her neyse, bir daha uzun zaman alacak bir komutu çalıştırdığınızda, kullanmayı düşünün at(bkz. Sayfa:) man at. Bu bir iş olarak sıraya girecek, bittiğinde size bildirilecek, vb. Çok basit, Cron benzeri, ancak işlerin tek çekimleri için.
gertvdijk

Yanıtlar:


11

Bunu çalıştırın:

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

Veya bir bash betiği yapabilirsiniz. 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")."

Ardından yürütme izni verin:

chmod +x wait-for-death.sh

ve 'PID' sürecini geçerek çalıştırın:

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

while kill -0 <pid>; do ...daha taşınabilir - Linux olmayan sistemlerde de çalışacaktır. Ve bash kullanmak için bir neden yok - kodunuz herhangi bir bashis kullanmıyor, bu yüzden /bin/shburada gayet iyi.
Richard Hansen

1
@RichardHansen Bu site Ubuntu hakkında, bu StackOverflow değil.
hytromo

@RichardHansen Teşekkürler kill -0, bence daha zarif bir çözüm.
Eric Carvalho

@hakermania: Anlıyorum, bu yüzden hala +1 verdim. Birisi BSD / Solaris / vb. sistemi. Ubuntu'ya özgü bir şey yapmanın bir nedeni olmadıkça POSIX'e bağlı kalmanın iyi bir fikir olduğuna inanıyorum . Bu durumda, hiç bir neden yok değil bir POSIX conformant senaryo yazmaya.
Richard Hansen

2

PID çarpışmalarından kaçınmak istiyorsanız şunları kullanabilirsiniz 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

Belki de komut timeihtiyacınıza uygundur:

time [options] command [arguments...]

Misal:

time /local/usr/bin/myProcess arg1 arg2

İşlem bittiğinde, işlemi timetamamlamak için geçen süre gibi bazı istatistikleri gösterecektir (sanırım saniyeler içinde).

Kılavuz sayfasını kontrol edin veya bu çevrimiçi kılavuz sayfasına bir göz atın .


OP "süreci zaten başlattığını" söyledi. time bir seçenek değil.
Eric Carvalho
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.