Здесь есть несколько вопросов и ответов, касающихся оповещения о завершении / выходе процесса ( 1 , 2 ), но все они предполагают, что пользователь сам выполнил указанный процесс, и, таким образом, могут написать его с помощью встроенного в управляющий сценарий или направить процесс к какому-либо предупреждению.
Моя ситуация такова, что я хотел бы получить уведомление о завершении / завершении процесса, который мой пользователь не инициализирует. А именно, я массово обрабатываю массивные видеофайлы на сервере Ubuntu 12.04 LTS. Определенные операции с этими файлами занимают очень много времени, поэтому я хотел бы получить какое-то предупреждение (электронная почта была бы хороша), когда конкретный завершается. Они занимают так много времени, что делать это одноразово, вручную, на основе PIT, было бы прекрасно.
Чтобы предоставить больше информации - скажем, я обрабатываю особенно большой файл, и я вижу, что он перешел к сценарию FFMPEG, сам процесс является сценарием Python (который довольно сложен, не написан мной и что-то в этом роде) Я не хочу изменять - хотя это был бы первый логический подход). Я представляю команду или сценарий с PID указанного запущенного сценария python в качестве аргумента, и когда процесс с этим PID больше не выполняется, сценарий оповещения делает свое дело.
Любые идеи?
Ответы:
Я написал process_watcher.py
В настоящее время тело письма выглядит так:
Устраните проблему с GitHub, если вам нужны какие-либо улучшения.
источник
Что-то вроде этого?
Замените
$pid
на идентификатор процесса иecho "finished"
все, что вы хотите сделать при выходе из процесса.Например:
источник
kill -0
сообщаетNo such process
о несуществующих pids иOperation not permitted
pids, принадлежащих другому пользователю, поэтому, возможно, интерпретация сообщения об ошибке должна устранить необходимостьsudo
echo -en "\007 \007 \007"
, который выдаст терминал «колокол». Преобразуется ли это в реальный слышимый звук, зависит от вашего терминала и аппаратного обеспечения (но обычно так и есть).Я использую
&&
для выполнения второй команды, когда первая успешно завершена. Вот несколько примеров:Удалить большую папку и подать звуковой сигнал:
Скомпилируйте ядро и отправьте электронное письмо:
Это хороший способ решить вашу проблему? В другом случае вы можете добавить
||
и третью команду в случае сбоя.Кроме того, сценарий оболочки может получить статус выхода (
$?
) вашей команды, а с помощьюif/else
циклов и вы можете делать все, что захотите.источник
Если у вас нет pid, он будет работать до тех пор, пока все экземпляры ffmpeg не будут завершены:
источник
Если вы не хотите использовать опцию опроса или внешний сценарий, и вы уже запустили длительный процесс, вы можете приостановить его с помощью CTRL + Z (отправляет сигнал SIGTSTP), а затем возобновить его с
fg
(перемещает процесс в на переднем плане).Например:
источник
Я сделал приложение, которое отправит уведомление на ваш телефон Android, когда процесс завершится, чтобы вам не пришлось привязываться к компьютеру.
Установите, затем добавьте
;notifier.sh
в конец вашей команды.Например, если ваша команда была
make install
, вы бы сделали свою команду:make install; notifier.sh
https://notifier.sh
https://play.google.com/store/apps/details?id=sh.notifier
источник