2017-02-14 99 views
0

我正在使用Makefile运行Packer。这是非常重要的,如果我杀了一个任务与Ctrl + C信号传递给子进程。发送信号给子进程?

现在看来,GNU Make只是简单地中止并且不发送TERM信号给子进程。 Packer在收到此信号后会尝试清理资源,这是非常重要的,因为它可以创建EC2实例。

回答

0

我无法重现的行为,你看到:

$ echo 'all: ; @echo sleeping; sleep 600' | make -f- 
sleeping 
^C 
make: *** [/tmp/GmjcnM8Y:1: all] Interrupt 

$ ps -aef | grep sleep 

的C-C后,睡程序也被杀害。因此,你将不得不提供更多的细节。

+0

我认为问题在于'打包器'和'睡眠'进程必须发送信号,然后disanned并发送到后台。通常在Packer中,如果发送TERM信号,该过程将发出更多关于如何清理所有内容的日志。在Make中,发送TERM后不会再发送输出。 –

+0

对不起,但我不明白你的评论。你的问题说,make不会转发^ C(SIGTERM),但make会转发^ C。如果还有更多事情需要发生,那么你必须自行安排:make不知道它调用的过程实际上做了什么:它只是启动一个过程并等待它完成。如果它得到一个SIGTERM,它会传递给孩子们。请注意,使用进程组就像其他任何UNIX程序一样:如果您运行的进程更改为不同的进程组,则没有办法做到这一点。 – MadScientist