子进程执行结束之后,父进程如果不对其进行回收,子进程就会变为僵尸进程。
父进程可以通过调用wait()函数和waitpid()函数去回收子进程.
由于子进程结束时会发送SIGCHLD信号给父进程,不过此信号的默认动作为忽略,我们可以通过系统函数sigaction()设置信号捕捉,在信号捕捉函数中去回收子进程。
信号捕捉函数中回收子进程的方法:
waitpid函数
下面展示一些 代码片
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>
#include <stdlib.h>
void cat_sigchild(int sig)
{
int status;
pid_t pid;
while((pid = waitpid(0,&status,WNOHANG)) > 0)
{
if(WIFEXITED(status))
{
printf("child exit with %d\n"