【发布时间】:2018-01-15 14:59:28
【问题描述】:
我正在尝试写一个任务控制程序,很像Supervisor。
我从一个配置文件运行一些程序并让它们在后台运行,而在主进程中我读取并执行其他命令。
在fork()-ing之前,在我调用的主进程中:
sigaction(SIGINT, &the_handler, NULL);
the_handler 存储一个简单打印函数的引用。
当按下 CTRL+C 时,子进程也会被中断(这是我不想要的)。
我可以在子进程中 fork 后运行:signal(SIGINT, SIG_IGN); 忽略它,但我希望仍然能够在 bash 中运行此命令:$ kill -n 2 <child_pid>,意思是,我不想忽略它,对吧?
那么,如何忽略 CTRL+C 到子进程的 SIGINT,但仍然能够通过其他方式接收信号呢?还是我错过了什么?
【问题讨论】:
-
这有点像 x/y 问题。您显然不想更改孩子对信号的接收,而是阻止终端会话从 Ctrl
按键向孩子发送 SIGINT。这是使用 setsid或daemon完成的
标签: c signals child-process