Предположим, я запускаю команду в одном сеансе оболочки, например bash -c 'apt-get update && apt-get upgrade'
. Спустя 5 минут я решил выйти на улицу, чтобы перекусить, и понял, что забыл добавить какой-то механизм уведомления о том, был ли выход успешным или неудачным.
Ну а что мне теперь? Если бы только я мог запросить у другого терминала состояние выхода этой другой команды (или, в частности, этого PID), возможно, я мог бы в конце концов отобразить какое-то всплывающее окно. Итак, вопрос: как я могу запросить состояние выхода уже запущенного процесса с другого терминала?
Другими словами,
ПОДАРОК, что у меня запущен процесс в терминале А, и известен его PID
КОГДА я выполняю какую-то команду в терминале B
ПОТОМ я должен быть в состоянии знать, завершается ли процесс в терминале со статусом выхода 0 или статусом выхода> 1.
источник
wait
чтобы получить код фонового процесса в вашей текущей оболочке после его завершения, но я не смог найти ничего, что позволило бы запрашивать другие оболочки. Простой мониторинг того, запущен ли еще какой-либо процесс и вызывает ли предупреждение после его выхода, также тривиально, но не выясняет его код завершения. Единственный способ, который я мог бы придумать, - это подготовить вашу оболочкуPROMPT_COMMAND
для хранения последнего кода выхода в временном файле или аналогичном доступном месте. Будет ли это вариант?Ответы:
Используйте
strace
следующим образом:Здесь не интересны ни системные вызовы, ни сигналы, поэтому мы советуем
strace
игнорировать их с помощью-e
выражений и подавлять сообщение о состоянии с помощью-q
.strace
присоединяется к процессу с PID$PID
, ожидает его нормального выхода и выдает свое состояние выхода следующим образом:Простое
if
выражение для вызова любого типа уведомления может быть:Пример запуска
Большая часть кредита идет на этот ответ на U & L , пожалуйста, оставьте там отзыв, если вы найдете это полезным.
источник