Я хочу знать, когда завершится запущенный процесс. Как я могу посмотреть это?

14

Я хотел бы знать любую команду, которую я могу выполнить, чтобы узнать время окончания процесса.

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

Спасибо за вашу помощь.

user2504890
источник
7
Интересный вопрос. Во всяком случае, в следующий раз , когда вы запускаете команду , которая занимает много времени, рассмотреть вопрос об использовании at(см справочной страницы: 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 ...более переносимый - он будет работать и на не-Linux системах. И нет никаких причин использовать bash - ваш код не использует никаких bashisms, поэтому /bin/shздесь прекрасно.
Ричард Хансен
1
@RichardHansen этот сайт о Ubuntu, это не StackOverflow.
hytromo
@RichardHansen Спасибо за kill -0, я думаю, что это более элегантное решение.
Эрик Карвалью
@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)"
l0b0
источник
0

Может быть, команда timeподходит для ваших нужд:

time [options] command [arguments...]

Пример:

time /local/usr/bin/myProcess arg1 arg2

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

Проверьте справочную страницу или просто загляните на эту онлайновую справочную страницу .

Роко
источник
ОП сказал, что он «уже запустил процесс», поэтому timeэто не вариант.
Эрик Карвалью