У меня есть live CD, который загружается в Linux и запускает небольшой скрипт Bash. Скрипт ищет и запускает вторую программу (обычно это скомпилированный бинарный файл C ++).
Вы должны быть в состоянии прервать вторую программу, нажав Ctrl+ C. Что должно произойти, так это то, что вторая программа останавливается, и скрипт Bash продолжает выполнять очистку. На самом деле происходит то, что основное приложение и скрипт Bash завершаются. Что является проблемой.
Поэтому я использовал trap
встроенную функцию, чтобы сказать Bash игнорировать SIGINT. И теперь Ctrl+ Cзавершает работу приложения C ++, но Bash продолжает работать. Отлично.
Ах да ... Иногда "второе приложение" - это другой скрипт Bash. И в этом случае Ctrl+ Cтеперь ничего не делает .
Ясно, что мое понимание того, как это работает, неверно ... Как я могу контролировать, какой процесс получает SIGINT, когда пользователь нажимает Ctrl+ C? Я хочу направить этот сигнал только на один конкретный процесс .
set -m
. Это немного чище и проще, чем использоватьsetsid
каждый раз, когда вы запускаете ребенка.