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

小白请教关于Listen、accept、信号处理函数、waitpid的几个问题

    来源: 互联网  发布时间:2017-02-26

    本文导语:  本帖最后由 wangfeng2500 于 2012-06-09 17:03:56 编辑 (1)假设写了一个简单的单进程TCP服务器函数,在Listen后,使用accept等待连接,这里监听套接字是不是和accept并行执行的?因为accpet那段即便正在执行,再来一个客户连...

本帖最后由 wangfeng2500 于 2012-06-09 17:03:56 编辑
(1)假设写了一个简单的单进程TCP服务器函数,在Listen后,使用accept等待连接,这里监听套接字是不是和accept并行执行的?因为accpet那段即便正在执行,再来一个客户连接也可以加入到Listen的队列中。是不是因为Listen套接口,将连接拉入队列是由内核完成的,这些操作可以跟应用程序中(比如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返回

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 小白问一个端口的问题~!
  • 小白请教linux ./configure问题
  • 小白装Ubuntu系统
  • 关于linux的小白问题~
  • 问个关于Linux的小白问题!
  • 内核重编译前的小白问题
  • Ubuntu10.0下进不了文字界面!小白求教!!!!!!!!!!
  • 小白求助,vi编辑器的问题
  • 问个小白问题,我的ubuntu 10.04 的有线驱动问题
  • QT creator的小白问题
  • 编译Linux的一个小白问题
  • 小白误入.什么是POWER虚拟机?X86呢?32位单机么?
  • linux装载刚编译2.6.38.8内核,错误了, 那个大神帮帮小白
  • 小白菜求教linux大鸟
  • 怎么利用ftp传输文件,我是小白
  • 关于VM虚拟机的问题,小白求助!!!
  • 小白求助路径问题
  • 有个小白问题想问一下
  • 问一个小白问题,在交叉编译时,系统内核和开发板的内核有没有相关性?
  • 问个小白问题,在windows下能不能开发 arm上面的linux程序?


  • 站内导航:


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

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3