169it科技资讯


当前位置:  技术问答>linux和unix

epoll_wait时产生的"Interrupted system call"

    来源: 互联网  发布时间:2017-01-12

问题描述如下:

一个Linux进程中有三个线程,分别为A,B,C。

A线程中有epoll的使用,来监听来自其他进程的socket连接。

B线程负责处理来自A线程的连接处理。

C线程是一个定时器Timer线程,这个线程利用signal进行计数,signal使用的具体代码是:



 signal(SIGALRM,timer_handle);



当运行进程后,先执行B,C线程,然后再执行A线程。A线程运行中,在运行到epoll_wait函数调用时产生了“Interrupted system call”错误。

测试发现:

1. 如果禁掉C线程(定时器Timer线程),一切就会运行正常。

2. 如果A线程不用epoll机制,选用select机制,也会产生“Interrupted system call"错误。

请问,在保证三个线程都使用的情况下,如何解决这个问题。谢谢。

我的思路:是否在timer线程中不使用signal机制,或者在A线程中(使用epoll或者select)做些处理避免这个错误。

|


这个我真不清楚,没读过源码。。 我去围观一下得了。
本页相关标签:

    
相关技术文章:
    ▪FreeBSD编辑/etc/rc.conf出现permission denied

     用户是root,输入/etc/rc.conf,出现:/etc/rc.conf:permission denied,刚学装,查了很多,还是不知道怎么回事?还有我用pkg_add -r xorg安装x11,总是会停在一个地方不动! | 你要编辑/etc/rc.conf  直接输入/etc/rc.conf怎么行呢?! 要用编辑工具打开 比如用vi 不过你要修改 最好先备份 #cp /etc/rc.conf /etc/rc.conf.bak #vi /etc/rc.conf ......


    ▪ubuntu有无类似redhat中setup这样的命令

     怎么查看有无安装tftp这个软件 | $ dpkg --get-selections | grep tftp | dpkg -L|grep tftp ......


    ▪ubuntu下配置tftp 安装程序 apt-get install netkit-inetd出现的问题

     上网找到的教程是这样的。 1、安装程序    sudo apt-get install xinetd    sudo apt-get install  netkit-inetd    sudo apt-get install tftp-hpa tftpd-hpa root@ubuntu:/home/test# apt-get install netkit-inetd Reading package lists... Done Building dependency tree        Reading state information... Done Package netkit-inetd is a virtual package provided by:   inetutils-inetd 2:1.8-3   openbsd-inetd 0.20080125-6ubuntu1 You should explicitly select one to install. E: Package 'netkit-inetd' has no installation candidate 请问这里是怎么回事? | ......


 
最新技术文章:
    ▪makefile文件里面如何加打印?

     makefile文件里面如何加打印? | echo | 直接echo就可以了。 ......


    ▪问下这个makefile语句的意思

     ifeq ($(strip $(WITH_JIT)),)     WITH_JIT := true endif | 就是检查下WITH_JIT指向的那个变量是不是空,检查前先吧那个变量的空格去了。 如果是,就把WITH_JIT赋值true ......


    ▪linux下编程出现未知错误!

     pipeinnetwork.c:In function 'main': pipeinnetwork.c:60:warning:passing arg 1 of 'strsep' from incompatible pointer type pipeinnetwork.c:61:stray'\241' in program pipeinnetwork.c:61:stray'\241' in program pipeinnetwork.c:61:stray'\241' in program pipeinnetwork.c:61:stray'\241' in program 代码:       printf("please Enter command>");       fgets(command,MAX_CMD_LEN,stdin);       command[strlen(command)-1]=0;              pipe_front=strsep(&command,"|");  61:        pipe_behind=command;              //父进程             pipe(pipefds); // 开始创建管道的2段 |......


 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2017,169IT.COM,E-mail:www_169it_com#163.com(请将#改为@)

浙ICP备11055608号