2016-07-15 141 views
0

我有一個進程(稱爲進程A),它啓動了進程B的幾個實例。當在gdb中調試進程A時,如果我用Ctrl + C來暫停進程A SIGINT,所有的子進程B都被殺死了,所以我必須在完成調試進程A後重新啓動整個事情。有沒有辦法阻止gdb向子進程發送SIGINT,從而殺死它們(至少我假設這就是發生了什麼)?如果是這樣,那是什麼?gdb:中斷正在運行的進程沒有終止子進程

請注意,我沒有進程B的源代碼(所以我不能添加一些代碼來處理SIGINT)。進程接口使用C++。

+0

我覺得這樣的問題可能以前曾被問過,但我無法在SO或搜索引擎上找到任何東西。對不起如果重複! –

回答

1

在A.嘗試

signal(SIGINT, SIG_IGN); 

根據man signal(重點煤礦),

通過fork創建子(2)繼承了其父的信號傾向的副本。在execve(2)期間,被處理信號的處置被重置爲默認值; 忽略信號的配置保持不變

+0

既然你說過「嘗試」,我覺得我應該補充說,事實上,這確實有效。單獨調用'signal(SIGINT,SIG_DFL);'也似乎不需要gdb在進程A中停止。 –