僵尸进程

    在fork()/execve()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用waitpid()等待子进程结束,又没有显式忽略该信号,子进程则成为僵尸进程,无法正常结束,
    此时即使是root身份kill -9也不能杀死僵尸进程。补救办法是杀死僵尸进程的父进程(僵尸进程的父进程必然存在),僵尸进程成为"孤儿进程",过继给1号进程init,init始终会负责清理僵尸进程。
    产生僵尸进程:
int main(void)
{
        pid_t pid;

        if((pid = fork()) < 0)
        {    
                printf("fork error");
        }else if(pid == 0)
        {    
                    exit(0);
        }    

        system("ps|grep defunct|grep -v grep");
        exit(0);

}

本文出自 “study-c” 博客,转载请与作者联系!

你可能感兴趣的:(职场,休闲,僵尸进程)