2019年12月14日 上午11:11
Linux 守护进程的启动方法 - 阮一峰的网络日志
- 只要在命令的尾部加上符号
&,启动的进程就会成为”后台任务”。如果要让正在运行的”前台任务”变为”后台任务”,可以先按ctrl + z,然后执行bg命令(让最近一个暂停的”后台任务”继续执行)。 - “后台任务”有两个特点
- 继承当前 session (对话)的标准输出(stdout)和标准错误(stderr)。因此,后台任务的所有输出依然会同步地在命令行下显示。
- 不再继承当前 session 的标准输入(stdin)。你无法向这个任务输入指令了。如果它试图读取标准输入,就会暂停执行(halt)。
- 用户退出 session 以后:
- 用户准备退出 session
- 系统向该 session 发出SIGHUP信号
- session 将SIGHUP信号发给所有子进程
- 子进程收到SIGHUP信号后,自动退出
- disown命令。
- 它可以将指定任务从”后台任务”列表(jobs命令的返回结果)之中移除。一个”后台任务”只要不在这个列表之中,session 就肯定不会向它发出SIGHUP信号
- “后台任务”的标准 I_O 继承自当前 session,disown命令并没有改变这一点。一旦”后台任务”读写标准 I_O,就会发现它已经不存在了,所以就报错终止执行。
- 对”后台任务”的标准 I/O 进行重定向.
1
2node server.js > stdout.txt 2> stderr.txt < /dev/null &
disown - nohup命令对进程做了三件事:
- 阻止SIGHUP信号发到这个进程。
- 关闭标准输入。该进程不再能够接收任何输入,即使运行在前台。
- 重定向标准输出和标准错误到文件nohup.out。
- nohup:
- nohup命令实际上将子进程与它所在的 session 分离了
- nohup命令不会自动把进程变为”后台任务”,所以必须加上&符号
- Screen 命令与 Tmux 命令
- systemd:
- Linux系统有自己的守护进程管理工具 Systemd 。它是操作系统的一部分,直接与内核交互,性能出色,功能极其强大。我们完全可以将程序交给 Systemd ,让系统统一管理,成为真正意义上的系统服务