正常在terminal启动一个程序,在terminal关闭后,进程也随之退出

这样启动,称之为前台任务,独占了terminal窗口 能够在后台一直运行的,称之为守护进程daemon

xx.py &

只要在命令的尾部加上符号&,进程就会变成后台任务,如果想让正在运行的前台任务变为后台任务,可以先按ctrl+z, 然后执行bg命令(让最近一个暂停的后台任务继续执行)

后台任务有两个特点:

  • 继承当前session的stdout和stder,因此后台任务的输出依然会同步的在命令行显示
  • 不再继承stdin,如果试图读取标准输入,就会暂停

用户退出session后,系统向该sesion发出SIGHUP信号,session将该信号发给所有子进程 所以前台任务会随着session的退出而退出,后台任务是否会退出呢? 这取决于shell的huponexit参数

shopt | grep huponexit

一般默认关闭,因此session退出的时候不会给后台任务发sighup信号。

但当huponexit参数打开的时候,这个后台进程就可能退出了

nohup命令解决了这些事情

  • 阻止sighup信号发送到这个进程
  • 关闭标准输入
  • 重定向标准输出和标准错误到文件nohup.out
    nohup xx.py &
    

另一种思路是使用screen和tmux来复用terminal

终极方式设置为systemd自启动 Linux 中设置进程通过 systemctl 启动