0%

Linux 守护进程的启动方法bg、disown、nohup、tmux、sytemd

2019年12月14日 上午11:11
Linux 守护进程的启动方法 - 阮一峰的网络日志

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