僵尸进程

    在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);

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章