孤儿进程和僵尸进程的区别?怎么避免这两类进程?守护进程?

1、 ⼀般情况下,⼦进程是由⽗进程创建,⽽⼦进程和⽗进程的退出是⽆顺序的,两者之间都不知道谁先退出。正常情况下⽗进程先结束会调⽤ wait 或者 waitpid 函数等待⼦进程完成再退出,⽽⼀旦⽗进程不等待直接退出,则剩下的⼦进程会被init(pid=1)进程接收,成会孤⼉进程。(进程树中除了init都会有⽗进程)。

2、 如果⼦进程先退出了,⽗进程还未结束并且没有调⽤ wait 或者 waitpid 函数获取⼦进程的状态信息,则⼦进程残留的状态信息( task_struct 结构和少量资源信息)会变成僵⼫进程。⼦进程退出时向⽗进程发送SIGCHILD信号,⽗进程处理SIGCHILD信号。在信号处理函数中调⽤wait进⾏处理僵⼫进程。原理是将⼦进程成为孤⼉进程,从⽽其的⽗进程变为init进程,通过init进程可以处理僵⼫进 程。

3、 守护进程( daemon) 是指在后台运⾏,没有控制终端与之相连的进程。它独⽴于控制终端,通常周期性地执⾏某种任务 。守护进程脱离于终端是为了避免进程在执⾏过程中的信息在任何终端上显示并且进程也不会被任何终端所产⽣的终端信息所打断。

Last updated