Хочу знати, коли закінчується запущений процес. Як я можу це спостерігати?


14

Я хотів би знати будь-яку команду, яку я можу запустити, щоб знати час завершення процесу.

Я вже запустив процес і знаю його PID, але я хочу знати, чи є якась команда, яка може сказати мені, в який час він закінчився.

Спасибі за вашу допомогу.


7
Цікаве запитання. У будь-якому разі, наступного разу, коли ви запустите команду, яка займає тривалий час, подумайте про використання at(див. Manpage:) man at. Це поставить в чергу як роботу, вам буде повідомлено про її закінчення і т. Д. Це дуже просто, схоже на Cron, але для одиночних знімків роботи.
gertvdijk

Відповіді:


11

Виконати це:

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

Або ви можете зробити сценарій 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")."

Потім дайте йому дозвіл на виконання:

chmod +x wait-for-death.sh

і запустіть його, передаючи PID процесу:

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

while kill -0 <pid>; do ...є більш портативним - він працюватиме і в нелінукс-системах. І немає ніяких причин використовувати bash - ваш код не використовує ніяких башизмів, тому /bin/shтут ідеально добре.
Річард Хансен

1
@RichardHansen Цей сайт про Ubuntu, це не StackOverflow.
hytromo

@RichardHansen Дякую за kill -0, я думаю, що це більш елегантне рішення.
Eric Carvalho

@hakermania: Я розумію, саме тому я все-таки дав +1. Я просто вказував пару способів зробити скрипт більш портативним у випадку, якщо хтось захоче зробити те саме на BSD / Solaris / тощо. система. Я вважаю, що доцільно дотримуватися POSIX, якщо немає причин робити щось, що стосується Ubuntu. У цьому випадку немає причин не писати сценарій, сумісний з POSIX.
Річард Хансен

2

Якщо ви хочете уникнути зіткнення PID, ви можете скористатися 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

Можливо, команда timeвідповідає вашим потребам:

time [options] command [arguments...]

Приклад:

time /local/usr/bin/myProcess arg1 arg2

Як тільки процес закінчиться, timeбуде показана деяка статистика, як, наприклад, час, необхідний для завершення процесу (я думаю, в секундах).

Перегляньте довідкову сторінку або просто загляньте на цю веб- сторінку .


ОП заявив, що "вже запустив процес", тому timeце не варіант.
Ерік Карвальо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.