【发布时间】:2016-06-12 20:10:08
【问题描述】:
我在https://en.wikipedia.org/wiki/Daemon_%28computing%29#Creation阅读有关守护进程的信息
在严格的技术意义上,类 Unix 系统进程是一个守护进程 当它的父进程终止并且守护进程被分配了init 进程(进程号 1)作为其父进程,并且没有 控制终端。然而,更常见的是,守护进程可以是任何 后台进程,无论是否是 init 进程的子进程。
在类 Unix 系统上,将进程变为 守护进程,当进程从命令行或从 启动脚本,例如 init 脚本或 SystemStarter 脚本, 涉及:
- 与控制终端分离
- 成为会议负责人
- 成为流程组组长
- 通过分叉和退出(一次或两次)作为后台任务执行。有时需要该过程才能成为会话 领导。它还允许父进程继续正常 执行。
- 将根目录 (/) 设置为当前工作目录,这样进程就不会保留任何可能正在使用的目录 已挂载的文件系统(允许卸载)。
- 将 umask 更改为 0 以允许 open()、creat() 和其他操作系统调用提供自己的权限掩码,而不是 依赖于调用者的umask
- 在执行时关闭所有被父进程打开的继承文件,包括文件描述符 0、1 和 2 对于标准流(stdin、stdout 和 stderr)。所需文件 稍后会开放。
- 使用日志文件、控制台或 /dev/null 作为标准输入、标准输出和标准错误
如果进程由超级服务器守护进程启动,例如 inetd, launchd 或 systemd,超级服务器守护进程将执行这些 进程 [5][6][7] 的函数(旧式守护进程除外 转换为在 systemd 下运行并指定为 Type=forking[7] 和 inetd[5] 下的“多线程”数据报服务器)。
-
那里有一个步骤可以改变一个进程的父进程 被守护?在我看来,没有一个步骤可以做到这一点?
在守护进程时是否需要更改父进程?
改变一个进程的父进程后(一个进程不一定 被守护),该进程是否可以关联到控制 新父进程的tty? (这个问题的目的是 查看是否“保持进程与 控制新父进程的tty”是必要条件 “改变进程的父进程”。)
查看我的相关问题https://unix.stackexchange.com/questions/266565/daemonize-a-process-in-shell
谢谢。
【问题讨论】: