【发布时间】:2020-09-24 06:51:22
【问题描述】:
Can SIGCONT wake up the sleeping process?
我前天得知信号处理程序未能使进程的“睡眠”。
以同样的方式,我尝试使用信号处理程序“读取”失败。
代码如下。
#include <signal.h>
#include <unistd.h>
void signal_handler(int signo)
{
write(1, "\nI've got signal\n", 17);
return;
}
int main()
{
char buf[10];
signal(SIGINT, signal_handler);
read(0, buf, 1);
write(1, buf, 1);
return 0;
}
但是,在执行信号处理程序之后,进程又回到了 I/O 块状态。
还执行了以下代码进行重新验证。
#include <signal.h>
#include <unistd.h>
void signal_handler(int signo)
{
write(1, "\nI've got signal\n", 17);
return;
}
int main()
{
char buf[10];
signal(SIGINT, signal_handler);
sleep(100);
write(1, "awake", 5);
return 0;
}
在这种情况下,在收到信号处理程序后,进程不再处于休眠状态。
有没有办法在收到信号后退出阻塞状态,继续进程? (输入失败)
【问题讨论】:
标签: c linux process io operating-system