2017-04-13 78 views
0

我正在製作一個程序,該程序使用fork()創建大量進程,然後它將同一程序調用exec函數(這是教授要求的)。僅限於主進程的C Linux信號處理程序

我需要它對CTRL + C(SIGINT)做出反應並詢問用戶他/她是否要離開。問題在於信號處理程序也在所有的子進程中實現,因此,在發送信號時,用戶必須回答的次數與進程數量相同。

我只想讓用戶每CTRL + C詢問一次。

我可以實施哪些解決方案?

+0

先分叉,後來建立信號處理?或者在'exec'之前的孩子中,將信號處理程序設置爲默認值? –

+0

fork()生成的過程也會fork(),所以無論如何它將在(幾乎)所有進程中安裝處理程序。 –

+0

第一組子進程將知道它們是子進程,因此將繼續沿着與第一個「主」進程不同的路徑。如果他們不這樣做,我會說你的設計看起來有缺陷。 –

回答

0

當您撥打fork()時,父進程將取回孩子的pid。當父節點收到SIGINT信號時,您可以通過kill系統調用向子節點發送SIGTERM或SIGKILL信號。

+0

問題不在於如何向孩子發送信號;這是孩子們*已經接收到'SIGINT',並且以不同於OP的方式處理它。 –