如何中断Make生成的脚本?

时间:2019-06-05 15:21:23

标签: bash makefile copy-paste interrupt

如何使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 个答案:

答案 0 :(得分:1)

这不是make问题,而是您通过external_program启动的make之一。大概它会捕获并忽略SIGINT

您可以通过用external_tool <options>替换生成文件中的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规则毫无意义。仅当该信号传递到您在其中定义陷阱的外壳中传递时,才有​​意义。它会被传递到前台进程,这将是simulate规则启动的进程,除非您对Ctrl-C击键非常快。您可以完全删除该规则,并且仍然中断simulate规则所运行的过程。正如已经讨论过的那样,该过程如何响应信号是一个单独的问题。