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

execl函数后,fork子进程退出不响应SIGCHLD信号处理函数

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

    本文导语:  以下代码中,fork后,在子进程中利用execl函数拉起test可执行程序执行。在fork之前设置SIGCHLD信号的处理函数为sigHandle,但是编译运行时,却发现根本不会进入到SIGCHLD信号处理函数中,很是疑惑,难道子进程退出的时候对僵尸进...

以下代码中,fork后,在子进程中利用execl函数拉起test可执行程序执行。在fork之前设置SIGCHLD信号的处理函数为sigHandle,但是编译运行时,却发现根本不会进入到SIGCHLD信号处理函数中,很是疑惑,难道子进程退出的时候对僵尸进程已经处理了?还是说execl函数会将SIGCHLD信号处理??


求解。。。


#include ......  
   
pid_t cpid;  
  
 void sigHandle(int sig)  
{  
  printf("nin sigHandlen");  
  pid_t pid;  
  
 pid= waitpid(-1,NULL,0);  
 if (pid>0)  
 printf("pid=[%d] terminatedn",pid);  
 else  
 printf("waitpid error [%s]n",strerror(errno));  
  return ;  
}  
int main()  
{  
  
char path[]="/home/test";  
char pro_name[]="test";  
pid_t pid;  
  
 signal(SIGCHLD,sigHandle);  
pid=fork();  
  
if(pid==0)  
{cpid=getpid();  
  printf("cpid=[%d]n",cpid);  
  if( 0 > execl(path,pro_name,par,"start",NULL))  
 // if( 0 > system(path))   
{  
  printf("call program: [%s] failed!n",pro_name);  
  }// sleep(1); //此处加上后SIGCHLD信号处理函数怎么不执行了呢??  
printf("nnever run here n");  
}  
 return 0;  
}

|

事实是父进程fork()没有阻塞等待SIGCHLD,就直接return 0了,然后子进程变成了zombie

|
你在return 0前加个 pause();

|
pause方案不够专业。

了解一下sigprocmask+sigsuspend

|
你想做的其实就是wait所有的子进程。
可以对waited子进程和total子进程数都做记录,如果不相等就通过某种方式阻塞,然后再wait,直到回收了所有子进程为止。

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












  • 相关文章推荐
  • python下用os.execl执行centos下的系统时间同步命令ntpdate
  • 我想让vfork后就execl一进程,同时让execl出来的进程之间能相互通信,求助
  • execl的问题
  • 一个execl的问题
  • 关于fork execl...进程名字..
  • linux 下c 编程 一个关于execl的问题 希望请教
  • 如何结束调用execl后启动的程序
  • execl()的调用 !
  • 如果得到 execl 启动的程序的进程PID
  • execle调用mysqldump总提示couldn't find table
  • 请教关于execl()调用的问题
  • 菜鸟求教,execl()问题
  • 子线程中fork再execl的问题
  • 先 fork 子进程然后 execl 另一个可执行程序, 如何得到这个可执行程序结束的返回值?
  • 用execl实现重定向
  • Jsp中能创建,打开EXECL文件吗?如果行怎么读写数据?
  • 子线程中调用 execl的问题
  • word ,execl 中数据如何导入到数据库中??????
  • 请问在 linux 下如何使用 execl() 调用另一个多进程的程序?
  • 急!急!fork()一个子进程,然后再子进程中调用execl出了问题。
  • 请问我用程序如何编辑Adobe Acrobat 5.0的pdf文件(生成报表)啊?或者如何才能将已生成的execl报表转换成pdf格式?


  • 站内导航:


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

    ©2012-2021,