2017-04-13 79 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的方式处理它。 –