我用C编写了一个程序,我需要处理ctrl + z
和相应的SIGTSTP和SIGCONT信号。
收到信号后,我的变量和过程会发生什么变化?
通过信号处理程序signal(SIGCONT, &sig_handler);
处理信号后,我的进程会发生什么?
答案 0 :(得分:3)
有(至少)三种可能的情况:
该进程当前正在用户空间中运行:
在这种情况下,该过程被抢占(与多任务时其时间片用完时类似),并且在重新开始之前不考虑重新安排。
进程当前正在系统调用中等待:
通常系统调用被中断,并且在恢复之前不会考虑调度进程。当它恢复时,一些系统调用返回-EINTR
并且必须重新启动。一些系统调用会自动重启。
该过程是磁盘等待(状态D),例如,等待缓冲区/页面输入:
信号设置为待处理,但在操作完成之前不会发送。之后,它与上述情况之一相同。
通常这一切都对流程本身非常透明。
SIGTSTP
和SIGSTOP
的默认操作相同(但后者无法捕捉或忽略)。