我正在创建一个程序,使用fork()
创建大量进程,然后将exec
函数调用到同一个程序(这是教授要求的)。
我需要它对CTRL + C(SIGINT)做出反应并询问用户他/她是否想要离开。问题是信号处理程序也在所有子进程中实现,因此,当发送信号时,用户必须回答与进程数相同的次数。
我只想让它按CTRL + C一次询问用户。
我可以实施哪些解决方案?
答案 0 :(得分:0)
当您致电fork()
时,父流程将返回孩子的pid。当父节点收到SIGINT信号时,您可以通过kill
系统调用向子节点发送SIGTERM或SIGKILL信号。
答案 1 :(得分:0)
您可以设置一个全局变量pid,并在启动时使用getpid()的结果填充它。然后在信号处理程序中针对pid测试getpid(),然后执行您的代码。像这样,如果您是主要流程,请继续,如果没有退出!
最终结果:您将拥有一个由主进程运行一次的信号处理程序...。