[英]What happens when a program receives SIGTSTP signal
我用C语言编写了一个程序,需要处理ctrl + z
和相应的信号SIGTSTP和SIGCONT。
收到信号后,我的变量和过程会怎样?
通过信号处理程序signal(SIGCONT, &sig_handler);
处理signal(SIGCONT, &sig_handler);
,我的流程会怎样?
至少有三种可能的情况:
该进程当前正在用户空间中运行:
在这种情况下,该进程将被抢占(类似于多任务处理时其时间片用完的方式),直到恢复后才考虑重新安排该进程。
该进程当前正在系统调用中等待:
通常,系统调用会中断,并且直到恢复后才考虑对该进程进行调度。 恢复后,某些系统调用将返回-EINTR
,必须重新启动。 某些系统调用会自动重新启动。
进程正在等待磁盘(状态D),例如,等待缓冲区/页面进入:
该信号被设置为挂起,但直到操作完成才传递。 之后,它与上述情况之一相同。
通常,所有这些对于过程本身都是相当透明的。
这与SIGTSTP
和SIGSTOP
的默认操作相同(但是不能捕获或忽略后者)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.