首先说一下对于这个问题外的一些话:
我觉得我们应该有种质疑的态度,因为接下来的这个问题就和我们平常所想的不一样。
介绍一下问题:
曾经一直听说信号可以打断一个正在阻塞的进程,但是今天我试了一下关于信号打断阻塞在终端的问题,
代码:
int main(int argc, char** atgv) { 18 19 signal(SIGALRM,fun); 20 alarm(2); 21 char buf[1024]; 22 read(0,buf,100); 23 /* fd_set readfd; 24 FD_ZERO(&readfd); 25 FD_SET(0,&readfd); 26 int rec=select(1,&readfd,NULL,NULL,NULL); 27 printf("%d ",rec); 28 if(errno==EINTR) 29 { 30 printf("我被打断了 "); 31 32 33 }*/ 34 35 // printf("%d ",a); 36 return 0; 37 }
结果是:用alarm信号打断read时候信号处理函数被执行了可是我们的read仍在阻塞这个问题我目前深受质疑,也不能解答,但是我通过select来关注0文件描述符他会被打断的应执行打印我被打断
我的设想:可能是系统版本的原因,希望高人可以指点。