在c中使用信号并从程序中的特定点恢复

时间:2015-02-15 15:15:04

标签: c linux signals sigint

我正在编写一个程序,我需要捕获SIGINT信号,这样我就可以在没有父进程退出的情况下终止子进程。我可以通过发送SIGKILL来杀死子进程。

但在处理完信号后,主程序将从中断处继续。我想让它从其他地方恢复。例如,假设我有一个循环,并且信号在循环内的某处被捕获;在处理完信号之后,我希望程序从循环开始而不是中间恢复。

2 个答案:

答案 0 :(得分:2)

异步信号的本质在于它们可以随时中断代码。

如果代码中有不需要这种中断的部分,则禁用这些部分的信号。

在所有其他部分进行相关检查以确定是否发生了中断并使代码作出相应的反应。

答案 1 :(得分:-1)

抓住SIGINT以及除终止以外的任何事情都是非常糟糕的形式。如果你想拦截信号以便杀死孩子,那么你应该做一个并退出 - 不要正常继续你的程序。

在信号处理程序中,设置一个表示收到SIGINT的全局标志,然后在循环中测试该变量,并执行条件分支逻辑。