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

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

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 
  • Создание задачи Cron для уничтожения остановленных / неудачных прогонов в системе
  • убить несколько процессов с помощью awk-инструментов
  • Бессмертная сессия SSH
  • Почему я не могу использовать `kill $!` С расширением параметра в Bash, когда самый последний процесс «уведомлять-отправлять»?
  • не выполняет то, что он должен делать?
  • Как программно отключить пользователя ssh?
  • Вращающиеся журналы, созданные из tcpdump с logrotate
  • Сценарий оболочки для команды kill
  • Запрещенное ограничение обработчика сигнала процесса инициализации pid-имен
  • убить невосприимчивый процесс
  • Последовательность прерываний CTRL + C не работает для пользователя
  • Interesting Posts

    Эквивалент OS X «открыт» в Cygwin?

    Что является переопределением опции установки разрешений fstab?

    no null в ошибке / dev

    Разделить возвращенный блок текста на строки в терминале?

    У моей SD-карты есть раздел, но Linux не создает запись устройства для раздела

    Функция сценария Bash, которая изменяет значение переменной

    Linux (debian / testing) не может загрузиться после установки ядра 3.9.1

    Могу ли я настроить сенсорную панель в качестве клавиш-модификаторов в некоторых случаях?

    перенаправить ошибку на стандартный вывод

    Белый список определенных двоичных файлов и скриптов внутри монтирования noexec / nosuid?

    Как захватить вывод из команды в сценарии оболочки

    Разница между authpriv и auth?

    Используя rsync для инкрементного резервного копирования, что происходит, когда оригинальная полная резервная копия должна быть удалена?

    Как найти тег, содержащий фиксацию?

    В чем разница между vim и vim-lite?

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