当前位置: 技术问答>linux和unix
小白请教关于Listen、accept、信号处理函数、waitpid的几个问题
来源: 互联网 发布时间:2017-02-26
本文导语: 本帖最后由 wangfeng2500 于 2012-06-09 17:03:56 编辑 (1)假设写了一个简单的单进程TCP服务器函数,在Listen后,使用accept等待连接,这里监听套接字是不是和accept并行执行的?因为accpet那段即便正在执行,再来一个客户连...
(2)另外,信号的捕获以及信号处理函数的执行是不是由内核执行的,也是可以跟应用程序并行执行呢?因为再看到UNP第五章中服务器对子进程处理时使用了
void sig_child(int signo)
{
while(pid = waitpid(-1,&stat,WNOHANG) > 0)
;
return ;
}
这样的话,sig_child函数一直在运行,如果是应用程序在执行这个函数的话,这个函数没有返回,那应用程序再也没有办法去接收一个新的连接了啊?
|
①,listen调用之后,内核就开启了监听,所有的连接请求都会在底层完成三路握手,并进入连接队列等待用户层accept获取。(你应该是想理解这个过程,没说错吧)
②,信号处理函数是中断线程执行的,不是并行的。几个概念你再去看一下APUE梳理和巩固一下:
1,信号掩码是线程的.
2, 信号处理函数是进程的.
3, kill给进程的信号将会由内核投递到一个没有屏蔽该信号的线程,并中断该线程的执行,转向执行信号处理函数,待信号处理函数返回后该线程继续执行, 这个过程将不影响其他线程的执行。
③,注意你这个信号函数里使用的是waitpid NOHANG,也就是非阻塞wait,你这里又需要认清几个概念:
1,非实时信号不排队,也就是目前你接触过的信号,如果多个A信号被投递到一个线程中(假设该线程是进程唯一的线程,且阻塞该信号),那么只有一个A信号被保留,其他被抛弃。
2,根据1所知,在一次信号处理函数中,一定要非阻塞waitpid NOHANG循环执行,一直到waitpid返回
②,信号处理函数是中断线程执行的,不是并行的。几个概念你再去看一下APUE梳理和巩固一下:
1,信号掩码是线程的.
2, 信号处理函数是进程的.
3, kill给进程的信号将会由内核投递到一个没有屏蔽该信号的线程,并中断该线程的执行,转向执行信号处理函数,待信号处理函数返回后该线程继续执行, 这个过程将不影响其他线程的执行。
③,注意你这个信号函数里使用的是waitpid NOHANG,也就是非阻塞wait,你这里又需要认清几个概念:
1,非实时信号不排队,也就是目前你接触过的信号,如果多个A信号被投递到一个线程中(假设该线程是进程唯一的线程,且阻塞该信号),那么只有一个A信号被保留,其他被抛弃。
2,根据1所知,在一次信号处理函数中,一定要非阻塞waitpid NOHANG循环执行,一直到waitpid返回
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!