2017-02-14 96 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