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

求分析一个关于signal()的小程序

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

    本文导语:  程序: #include #include #include int wait_mark; void waiting(),stop(); int main(int argc,char **argv) {   int p1,p2;   signal(SIGINT,stop);      while((p1=fork())==-1);   if(p1>0)   {    //(1)     while((p2=fork())==-1);     if(p2>0)     { ...

程序:
#include
#include
#include

int wait_mark;

void waiting(),stop();

int main(int argc,char **argv)
{
  int p1,p2;
  signal(SIGINT,stop);
  
  while((p1=fork())==-1);
  if(p1>0)
  {
   //(1)

    while((p2=fork())==-1);
    if(p2>0)
    {
     // (2)
      wait_mark=1;
      waiting();
      kill(p1,10);
      kill(p2,12);
      wait(NULL);
      wait(NULL);
      printf("parent process exit!n");
      exit(0);
    }
    else
    {
      wait_mark=1;
      signal(12,stop);
      waiting();
      lockf(1,1,0);
      printf("child process 2 is killed by parentn");
      lockf(1,0,0);
      exit(0);
    }
  }
  else
  {
     wait_mark=1;
     signal(10,stop);
     waiting();
     lockf(1,1,0);
     printf("child process 1 is killed by parent!n");
     lockf(1,0,0);
      exit(0);
  }
}

void waiting()
{
  while(wait_mark!=0);
}

void stop()
{
  wait_mark=0;
}



分析:
1、如果把signal(SIGINT,stop)放到(1)和(2)位置时,相对应is else的else里面signal(12,stop),signal(10,stop)不在运行,为什么?(1)、(2)不都是主进程里吗?
2、为什么用两个wait(NULL);难道wait()不是等待所有子进程结束吗
3、每个程序段都用了exit(0);不用会怎么样?why?

|
1 子进程也需要注册SIGINT来结束waiting状态。
2 wait()是等待任意一个子进程结束。
3 第三个不确定,没有会造成僵尸进程?

|
先回答你第三个

在你的程序中,如果没exit(0),如果在exit(0)之前出现异常,那么就可能造成所谓的僵尸进程

或者说,实际上进程已经退出了,但是在系统内核里面的那个进程表里面,你的进程ID还没有被删除,这样就会造成一定的泄漏

    
 
 

您可能感兴趣的文章:

  • HASH查找的程序实现及性能分析
  • 急!请问有分析java程序性能瓶颈的工具吗?例如,统计 java 程序中函数调用次数?
  • http协议介绍,文件上传分析及程序举例
  • Web 流量分析程序 TraceWatch
  • c/c++服务器程序内存泄露问题分析及解决
  • Java程序性能分析工具 VisualVM
  • binlog分析程序 Open Replicator
  • 并行性能分析程序 Scalasca
  • Web日志分析程序 Analog
  • 股票分析程序 AIStockBot
  • C++程序分析工具 CppDepend
  • Apache日志分析程序
  • 如何使用yacc分析c语言程序?
  • 可视化数据分析程序 SciDAVis
  • 高分求linux下分析网络流量的程序c/c++源码
  • 编写把一java程序中所有的print语句都删除,帮忙分析一下思路。
  • 我用gprof工具分析程序,怎么老报错?
  • 谁有java写的词法分析程序.象pl0那样的.
  • c/c++ iis7站长之家
  • 一个程序两个结果,请高手分析原因
  • 大家帮我分析一下JAVA程序的主要结构吧?谢谢!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux下free命令显示的内存使用情况分析
  • 如何获取shell词法分析,语法分析及解释器的内容和信息
  • Linux下时钟同步问题:Clock skew detected原因分析及解决方法
  • 两台机器同时出现同样的故障,有人能帮分析分析吗?
  • Docker支持更深入的容器日志分析
  • 请教高手帮我分析分析!
  • mongodb的优点和缺点详细分析
  • 我想编程分析任意一个java文件,把其中的注释部分删掉,请帮我分析一下思路和方法好吗?
  • Docker容器分析----好处和缺点介绍
  • 如何分析linux宕机原因(或者说如何通过查日志分析宕机原因)
  • docker源码分析之容器日志处理与log-driver实现
  • Python的词法分析与语法分析
  • spring的事务类型及spring和hibernate可能导致的问题分析
  • 大家帮我分析分析:Samba的配置问题
  • Mysql大表查询优化技巧总结及案例分析
  • ubuntu 下安装libpcap 的时候make时候出错 请帮忙分析分析
  • MongoDB 查询分析
  • 200分求教有关linux核心的dos攻击算法分析以及源代码的情景分析,研究用,急!!!
  • Java 代码分析工具 JHawk
  • 显微镜数据分析 Gwyddion
  • 可视化数据分析 ParaView


  • 站内导航:


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

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

    浙ICP备11055608号-3