flash个人网站,网站建设要什么知识,在58同城做网站有生意吗,深圳广胜达建设公司1 signal处理僵尸进程的基于语法 利用信号signal处理僵尸进程的方法#xff1a;signal(SIGCHLD,SIG_IGN)#xff0c;该方法也是第三种处理僵尸进程的方法。 SIGCHLD#xff1a;子进程状态改变后产生此信号#xff0c;父进程需要调用一个wait函数以确定发生了什么。 1#…1 signal处理僵尸进程的基于语法 利用信号signal处理僵尸进程的方法signal(SIGCHLD,SIG_IGN)该方法也是第三种处理僵尸进程的方法。 SIGCHLD子进程状态改变后产生此信号父进程需要调用一个wait函数以确定发生了什么。 1SIG_IGN信号被无视ignore或忽略在该状态下调用进程的子进程将不产生僵尸进程。 该种模式下的子进程状态信息会被丢弃也就是自动回收所以不会产生僵尸进程但问题也就来了若调用wait、waitpid函数时无法捕捉到子进程状态信息了也就会阻塞到所有的子进程结束并返回错误ECHILD也就是没有子进程等待。 2SIG_DFL进程采用默认default行为处理而默认的处理方式是不理会该信号但也不会丢弃子进程的状态所以此时不用wait、waitpid对其子进程进行状态信息回收则会产生僵尸进程。 2 unix中僵尸进程的含义 凡是父进程没有调用wait函数获得子进程终止状态的子进程在终止之后都是僵尸进程在这个概念中关键一点就是父进程是否调用了wait函数。 3 SIGCHLD信号 简单地说子进程退出时父进程会收到一个SIGCHLD信号默认的处理方式是忽略该信号而常规的做法是在这个信号处理函数中调用wait函数获取子进程的退出状态。 4、既然在SIGCHLD信号的处理函数中要调用wait函数族为什么有了wait函数族还需要使用SIGCHLD信号? unix中的信号处理是采用异步处理机制 一般而言父进程在生成子进程之后会有两种情况一是父进程完成自己的任务二是父进程不做任务一直在wait子进程退出。 SIGCHLD信号就是为第一种情况准备的它让父进程去做别的任务而只要父进程注册了处理该信号的函数在子进程退出时就会调用该函数在函数中wait子进程得到终止状态之后再继续做父进程的事情。 注 1凡父进程不调用wait函数族获得子进程终止状态的条件下子进程在退出时都会变成僵尸进程 2SIGCHLD信号可以异步通知父进程有子进程退出。 参考 signal(SIGCLD,SIG_IGN) linux下的僵尸进程处理SIGCHLD信号