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

一个信号的问题

    来源: 互联网  发布时间:2016-09-09

    本文导语:  int main ( int argc, char *argv[] ) { int sock, fd; char buf[] = "hello world!"; sock = make_server_socket("192.168.1.101", 13000); if (sock == -1) { exit(1); } signal(SIGCHLD, child_waiter); while(1) { fd = accept(sock, NULL, NULL); printf("wow! get a ca...


int main ( int argc, char *argv[] )
{
int sock, fd;
char buf[] = "hello world!";
sock = make_server_socket("192.168.1.101", 13000);
if (sock == -1)
{
exit(1);
}
signal(SIGCHLD, child_waiter);
while(1)
{
fd = accept(sock, NULL, NULL);
printf("wow! get a calln");
if (fd == -1)
{
break;
}
process_request(fd);
close(fd);
}
return EXIT_SUCCESS;
} /* ----------  end of function main  ---------- */


void process_request (int fd)
{
int pid, exitstatus;
if ( fork()  == 0)
{
dup2(fd, 1);
close(fd);
execlp("date", "date", NULL);
perror("ececvp");
exit(1);
}
} /* -----  end of function process_request  ----- */
void child_waiter (int signum)
{
while (waitpid(-1, NULL, 0) > 0)
  ;
} /* -----  end of function child_waiter  ----- */

以上代码,必要的头文件和函数声明都有。
我的问题是:书上说在处理信号跳转的时候,系统会中断accept,accept会返回-1,然后主循环结束。
但我实验用:telnet 192.168.1.101 13000,输出一切正常阿,没有发现这个server程序还在运行ps下进程还在
这是为什么阿?
书上要求修改代码,让主函数有甄别是真正的错误,还是被打断的系统调用错误
这又是什么意思阿?

|
Linux平台的glibc没有调用系统调用signal,
而是使用sigaction实现的signal,
sigaction有一个参数可以指定SA_RESTART,
被SA_RESTART标志注册的信号处理函数,
即使打断某些系统调用,也能自动重启,不会返回失败,
可以试试siginterrupt函数,让系统调用允许被中断打断而不重启。

signal函数在不同平台表现不同,尽量用sigaction

|
书上要求修改代码,让主函数有甄别是真正的错误,还是被打断的系统调用错误
        if (fd == -1)
        {
            break;
        }

--->

        if(fd==-1)
        {
                if(errno == EINTR)
        continue;
      else
       break;

         }

|
不懂帮顶~

|

同意

    
 
 

您可能感兴趣的文章:

  • 生产者消费者问题为什么不可以共用一个信号量,如果这个信号量可以设置取值固定为0到N,即当信号量取值为N的时候阻塞进程,是否也可以?
  • 关于消息队列信号量信号共享内存等核心编程的问题(求知若渴!!!.....)
  • 可靠信号和不可靠信号的问题
  • 信号屏蔽问题(屏蔽不了信号)
  • 多个进程共用一个信号量,如果某个进程死掉,此时又将信号量锁定,其它进程就死掉,有什么办法可以解决这一问题
  • 守护进程的信号问题(UNIX环境高级编程 中的问题)
  • APUE中“信号”一节的问题
  • 信号与线程的问题
  • 求助一些关于信号量的问题
  • 请高手指教 linux 信号处理问题
  • 关于信号量的问题
  • 信号集问题
  • 一个关于信号的问题???
  • 一个关于信号处理的问题
  • linux中 关于 进程和信号的问题
  • 有关信号的几个问题 iis7站长之家
  • 有关信号的几个问题
  • 关于linux内核中信号处理的问题?(信号处理的时间)
  • 有关信号传递问题
  • unix的信号问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 进入信号处理函数,是不是会自动把进入信号加入信号屏蔽字?还有sigpending
  • 学习linux的新手问:linux进程信号掩码以及信号阻塞与信号未决怎么理解?
  • 关于信号量与UNIX信号的疑问
  • 当信号量(灯)遇上信号,help!
  • 请问什么时候发出SIGKILL信号、什么时候发出SIGTERM信号?
  • 安全信号和不安全信号的实现机制有什么不同么?
  • 如何确定信号的来源?即如何知道接收到的信号来自于哪一个进程号?
  • 自旋锁和读写自旋锁、信号量和读写信号量分别有什么区别?
  • semaphore.h sem.c Posix 信号量 System v 信号量
  • 【求助】linux/Unix下创建子进程,向父进程发送信号,子进程也能收到改信号,此时如何让子进程不收到信号
  • 信号可靠还是不可靠,取决与信号本身还是signal()/sigaction()的区别?
  • 信号处理函数里面用CRT函数可能导致"信号触发-处理"死循环吗?
  • 终端被关闭后,bash收到哪些信号,这些信号是怎么来的?
  • 书上说,中断用自旋锁,进程,用信号量,但是,为什么中断不能用信号量?
  • linux 中信号量的使用 当信号初始化的时候设置的值大于1将是如何?
  • 大侠们求指导,电信骨干网光纤信号分流成多个千兆网信号
  • 32号信号和33号信号哪里去拉?
  • 请问线程中的信号量,怎么设置成0,1信号量?
  • Linux下的信号忽略和信号阻塞是什么意思
  • 在执行信号处理程序来一个信号会怎么样?


  • 站内导航:


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

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

    浙ICP备11055608号-3