2013-10-08 146 views
1

基本上我想要一個bash腳本進程,在收到SIGINT後,在退出之前終止它的所有子進程。我讀here使用的線沿線的東西:

trap "kill -TERM -$$ ; exit 1" INT QUIT 

我也看過使用kill 0

trap "kill -TERM 0 ; exit 1" INT QUIT 

它們之間有什麼區別?它們滿足以下要求(如果):

  1. 僅殺死自己及其子女(假設它是由終端命令啓動的頂級進程)。
  2. 它不會殺死任何其他進程或同一個shell腳本的實例(從單獨的終端命令運行:即在運行./foo.sh &然後./foo.sh時,即使在同一個tty中也不應該殺死第二個進程) 。

回答

1

進程ID爲0表示執行kill命令的進程的進程組。負的進程ID是指進程組的ID是進程ID的絕對值。這兩者可能會有所不同,因爲流程組可能會發生變化。

他們應該是相同的項目1(我假設你不是手動創建或影響過程組)。第2項不是一個問題,因爲進程ID完全獨立於進程中執行的腳本的名稱。進程ID是明確的方式來引用特定的進程。


請注意,這是微不足道的撒謊的進程中執行的程序的名稱,所以它一般無用依靠你ps看到反正名稱:

exec -a someOtherName ./myScript 
+0

你沒有回答我的問題的其餘部分。 – Matt

+0

我什麼時候提過進程名或ps命令? – Matt