在子进程中忽略SIGINT信号

14
我正在编写一个简单的程序,其中父进程和子进程交替地向文件中打印。我已经使用用户定义的信号完成了这个任务。现在我想处理 SIGINT 信号。一旦收到 ctrl-c,父进程必须发送终止信号给子进程,子进程应该终止,最后父进程应该终止。

我的问题是,为了使它正常工作,我必须仅从父进程捕获 SIGINT信号并忽略来自子进程的信号。这样做是正确的吗?如果是,请提供有关如何实现的提示。

你可能会觉得这很有趣:http://www.linuxprogrammingblog.com/all-about-linux-signals - Alexandre C.
1个回答

34

调用:

signal(SIGINT, SIG_IGN);

来自子进程的代码将使子进程忽略SIGINT信号。从 man signal 中:

如果设置为SIG_IGN,那么该信号会被忽略。


我知道SIG_IGN操作,但我只想让子进程忽略它,当父进程捕获到信号时,终止子进程。 - Spyros
1
@SpyrosR,所以只让子程序调用它? - hmjd
是的。我已经设置了两个处理函数,一个用于父进程捕获信号并向子进程发送SITERM信号,另一个用于子进程忽略该信号,但我无法使其正常工作。例如,在子进程“工作”时按下ctrl-c,它确实调用了子处理函数,但也会为SIGINT信号调用父处理函数。 - Spyros
1
快速提示:在gdb中,SIG_IGN无效。无论如何,gdb都会使程序崩溃。 - Scott Franco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接