Безопасное уничтожение процесса переднего плана при завершении фонового процесса

Есть два сценария: первый в фоновом режиме, второй на переднем плане:

trap "ret=\$?; rm -f pipe1 pipe2; exit \$ret" EXIT INT TERM QUIT my.bin > pipe1 < pipe2 & my-term.sh pipe1 pipe2 

my-term.sh взаимодействует с пользователем через stdin / stdout (это похоже на программу терминала CLI):

 while read -ep "prompt> " l; do echo $l; done 

my.bin может быть смоделирован с помощью только скрипта exit 0 .

Как завершить my-term.sh если my.bin выходит по какой-либо причине?

Что работает:

 trap "ret=\$?; rm -f pipe1 pipe2; exit \$ret" EXIT INT TERM QUIT (my.bin > pipe1 < pipe2; kill -9 $$) & my-term.sh pipe1 pipe2 

Но это, вероятно, останавливает my-term.sh от очистки. Как это сделать правильно?

One Solution collect form web for “Безопасное уничтожение процесса переднего плана при завершении фонового процесса”

Попробуйте просмотреть список сигналов, если один из них не прошел, подождите три секунды (время сна может быть изменено на основе того, что предполагается my-term.sh ), а затем попробуйте другое:

 (my.bin > pipe1 < pipe2; x=$$ ; \ for sig in SIGTERM SIGINT SIGQUIT SIGABRT SIGKILL ; \ do kill -${sig} $x && break ; sleep 3s ; done ; ) & my-term.sh pipe1 pipe2 
  • Почему работает `killall init`, когда пользователь меня выводит?
  • Эффективный таргетинг конкретного туннеля SSH из всех текущих?
  • killall дает мне «никакого процесса найдено», но ps
  • использование sudo создает другой процесс
  • Как systemd выжить в kill -9?
  • Закрыть / убить / скрыть одно окно терминала в bash on 'process complete'
  • Последовательность прерываний CTRL + C не работает для пользователя
  • Как остановить бесконечный запущенный процесс (ztail), запущенный сеансом ssh после закрытия этого сеанса
  • сценарий оболочки для самоубийства
  • Убийство процессов в состоянии прерывистого сна?
  • Создание задачи Cron для уничтожения остановленных / неудачных прогонов в системе
  • Interesting Posts

    apache mod_headers используют базу 64

    Инструменты для отладки таблиц маршрутизации на машине Linux?

    grep IP-адреса в сценарии ожиданий

    Что такое память ядра и пользовательская память? (вопрос о терминах страницы ядра и кэша страниц)

    gparted перемещение, нераспределенное до 1-го раздела

    Может ли Bash сообщать интерактивный сеанс SSH из встроенного сеанса SSH?

    Использовать терминал в качестве доски

    Как Linux «убивает» процесс?

    dmesg – «новое высокоскоростное USB-устройство» повторяется навсегда

    Передайте литерал {} в качестве аргумента в find -exec

    неразрешенные зависимости файлов bz * для rpm из источника

    Кросс-компиляция Slackware: порядок сборки указан в любом месте?

    Поиск того, какой конкретный процесс Python был убит убийцей Linux OOM

    Как перечислять только имена файлов, удаляющих каталоги и подкаталоги

    Удалять файлы в каталоге, которые также находятся в другом каталоге

    Linux и Unix - лучшая ОС в мире.