关于linux信号和系统调用的问题
最近在看unix网络编程:套接字联网,其中讲到用信号来解决进程阻塞在多个IO操作上的问题,感觉有点困惑。假设有下面几句程序:
sigaction();
alarm(5);
if( n = read(sockfd,...,...)< 0){
if (error == EINT){
...
}
...
}
如果网络上一直没有数据包来,那么进程(假设没有设置非阻塞的套接字)一直阻塞在read系统调用上,进程进入睡眠状态,5秒后被信号中断然后返回。
一个进程在两种情况下会处理信号:
一个是从系统调用内核态返回到用户态之前的那段时间。
另一个是进程从睡眠被唤醒之前。
但是进程不是一直在睡眠的吗,难道是alarm时间到产生一个中断信号然后被signal系统调用捕获接着它又唤醒了进程?
不知此想法是否正确,求证。
------解决方案--------------------
是的