程序收到SIGTSTP信号时会发生什么

时间:2016-01-24 20:02:13

标签: c unix signals

我用C编写了一个程序,我需要处理ctrl + z和相应的SIGTSTP和SIGCONT信号。

收到信号后,我的变量和过程会发生什么变化? 通过信号处理程序signal(SIGCONT, &sig_handler);处理信号后,我的进程会发生什么?

1 个答案:

答案 0 :(得分:3)

有(至少)三种可能的情况:

  • 该进程当前正在用户空间中运行:

    在这种情况下,该过程被抢占(与多任务时其时间片用完时类似),并且在重新开始之前不考虑重新安排。

  • 进程当前正在系统调用中等待:

    通常系统调用被中断,并且在恢复之前不会考虑调度进程。当它恢复时,一些系统调用返回-EINTR并且必须重新启动。一些系统调用会自动重启。

  • 该过程是磁盘等待(状态D),例如,等待缓冲区/页面输入:

    信号设置为待处理,但在操作完成之前不会发送。之后,它与上述情况之一相同。

通常这一切都对流程本身非常透明。

SIGTSTPSIGSTOP的默认操作相同(但后者无法捕捉或忽略)。