孤儿进程和僵尸进程的区别?怎么避免这两类进程?守护进程?
1、 一般情况下,子进程是由父进程创建,而子进程和父进程的退出是无顺序的,两者 之间都不知道谁先退出。正常情况下父进程先结束会调用wait
或者 waitpid 函数
等待子进程完成再退出,而一旦父进程不等待直接退出,则剩下的子进程会被 init(pid=1)
进程接收,成会孤儿进程。(进程树中除了 init 都会有父进程)。
2、如果子进程先退出了,父进程还未结束并且没有调用 wait
或者 waitpid 函数
获取 子进程的状态信息,则子进程残留的状态信息( task_struct
结构和少量资源信息) 会变成僵尸进程。原理是将子进程成为孤儿进程,从而其的父进程变为 init 进程
,通过 init 进程
可 以处理僵尸进程。
3、守护进程( daemon) 是指在后台运行,没有控制终端与之相连的进程。它独立于控 制终端,通常周期性地执行某种任务 。守护进程脱离于终端是为了避免进程在执行 过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的终端信息所打 断。
守护进程是什么?怎么实现?
- 守护进程(Daemon) 是运行在后台的一种特殊进程。它独立于控制终端并且周期性 地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。
2. 守护进程特点
- 守护进程最重要的特性是后台运行。
- 守护进程必须与其运行前的环境隔离开来。这些环境包括未关闭的文件描述符,控制终端,会话和进程组,工作目录以及文件创建掩模等。这些环境通常是守护进程从执行它的父进程(特别是
shell
)中继承下来的。 - 守护进程的启动方式有其特殊之处。它可以在Linux系统启动时从启动脚本
/etc/rc.d
中启动,可以由作业规划进程crond
启动,还可以由用户终端(shell)
执行。
- 实现
- 在父进程中执行
fork
并exit
推出; - 在子进程中调用
setsid函数
创建新的会话; - 在子进程中调用
chdir函数
,让根目录”/
”成为子进程的工作目录; - 在子进程中调用
umask函数
,设置进程的umask
为0
; - 在子进程中关闭任何不需要的文件描述符;
版权声明:本文为qq_34170700原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。