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

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

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 
  • Как остановить бесконечный запущенный процесс (ztail), запущенный сеансом ssh после закрытия этого сеанса
  • Как я могу убить программу, запущенную из rc.local, когда Ctrl-C не работает?
  • Как создать псевдоним, чтобы убивать процессы, запущенные на порту TCP / IP?
  • Убивать другие процессы в трубопроводе (программно)
  • Временно заморозить процесс при взаимодействии оболочки
  • не выполняет то, что он должен делать?
  • Как я могу убить мой обработанный процесс yes?
  • Триггер Bash до смерти
  • Пропустить флаги для xargs
  • Убейте невосприимчивый процесс по имени, но сохраните реагирующие процессы
  • Как убить команду, выполненную из скрипта?
  • Linux и Unix - лучшая ОС в мире.