守护进程,孤儿进程,僵尸进程 - achilsh/async_fm GitHub Wiki

1.守护进程 其父进程是1号进程,.....

  1. 孤儿进程 父进程是1号进程。

  2. 僵尸进程 父进程 fork()之后, 子进程首先直接退出,或者子进程先于父进程退出,且父进程没有收集子进程的退出状态(wait), 导致系统中存有子进程资源,此时子进程为僵尸进程。在父进程退出之前,子进程的状态就是僵尸。

解决僵尸进程的方式,或者创建守护进程过程注意点:

  1. 因为子进程退出时都会向父进程发送SIGCHILD信号, 所以父进程可增加对SIGCHILD信号的监测,并在信号处理函数中对子进程的状态进行回收。 eg:

signal(SIGCHLD, f1. * 1.unc);

void func()

{

pid_t pid;

int stat;

//处理僵尸进程

while ((pid = waitpid(-1, &stat, WNOHANG)) >0)

{

printf("child %d terminated.\n", pid);

}

}


  1. fork()两次。该思想可用于实现守护进程过程。