如何使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>
答案 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
规则所运行的过程。正如已经讨论过的那样,该过程如何响应信号是一个单独的问题。