У меня есть приложение для Linux, написанное на C++, которое перехватывает прерывание SIGINT для окончательной очистки перед выходом. Я называю это приложение в скрипте bash. Теперь, когда я набираю control-C со сценарием bash, работающим на переднем плане, сценарий завершается так же, как и вызываемая им программа, но без выполнения окончательного кода очистки. Как я могу сделать так, чтобы прерывание проходило через сценарий bash непосредственно к приложению, что привело бы к окончательной очистке, а затем к обычному завершению, которое затем привело бы к завершению самого сценария?
2 ответа
1
bash
также имеет возможность ловить SIGINT. Было бы целесообразно перехватить сигнал, чтобы скрипт не умер, а затем в обработчике перехвата использовать kill
чтобы передать сигнал в ваше приложение.
1
#somecommand has to be a unique substring of the command being run
trap "kill -3 %?somecommand" sigint
somecommand&
wait %?somecommand