Как прервать сделать созданный скрипт? - PullRequest
1 голос
/ 05 июня 2019

Как сделать прерывание Ctrl-C Создать порожденный скрипт.

Мой make-объект порождает скрипт.Пока он работает, я нажимаю Ctrl-C, чтобы прервать его, но это не влияет.Я должен сделать Ctrl-Z, чтобы приостановить процесс, а затем убить%.Есть ли способ прервать сценарий с помощью Ctrl-C?

В моем Makefile есть следующее:

run:
bash -c "trap 'trap - SIGINT SIGTERM ERR; exit 1' SIGINT SIGTERM ERR; $(MAKE) run_int"

run_int:
$(MAKE) simulate

simulate:
-$(CALL_TOOL)

CALL_TOOL = external_tool <options>

1 Ответ

1 голос
/ 05 июня 2019

Это не проблема make, а одна из external_program, которую вы запускаете через make.Предположительно, он ловит и игнорирует SIGINT.

. Вы можете убедиться в этом, заменив external_tool <options> в make-файле, представленном, скажем, sleep 30.Если затем вы запустите make из терминала, вы обнаружите, что Ctrl-C (в этом терминале) прерывает выполнение sleep очень хорошо:

$ make
bash -c "trap 'trap - SIGINT SIGTERM ERR; exit 1' SIGINT SIGTERM ERR; make run_int"
make[1]: Entering directory `/home/jb/tmp'
make simulate
make[2]: Entering directory `/home/jb/tmp'
sleep 10
^Cmake[2]: *** [simulate] Interrupt
make[1]: *** [run_int] Interrupt
make: *** [run] Error 1

Обратите внимание такжечто ваше run правило бессмысленно.Треппинг SIGINT будет уместен, только если этот сигнал доставляется в оболочку, в которой вы определяете ловушку, а это не так.Он доставляется на передний план, который будет запускаться по правилу simulate, если вы не обладаете сверхчеловеческой быстротой при нажатии клавиши Ctrl-C.Вы можете полностью удалить это правило и все же прервать процесс, выполняемый правилом simulate.Как уже обсуждалось, как этот процесс реагирует на сигнал, это отдельный вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...