九零不老心
发布于 2019-02-27 / 16 阅读 / 0 评论 / 0 点赞

linux程序后台运行

我们知道: command & :会将程序后台运行,但关闭终端,程序仍会终止。 下面介绍几种,能让程序在后台可靠运行的方法:
  1. nohup nohup sh test.sh & #日志会输出到nohup.out文件中 或者 nohup sh test.sh > test.log 2>&1 & #日志输出到自定义文件中
  2. setsid setid sh test.sh
如果事先在命令前加上 nohup 或者 setsid 就可以避免 HUP 信号的影响。但是如果我们未加任何处理就已经提交了命令,该如何补救才能让它避免 HUP 信号的影响呢?
  1. disown sh test.sh 执行过程中 ctrl+z,将程序置于后台 bg %1,让程序后台运行 disown -h %1,让程序后台运行,不受关闭终端的影响
我们已经知道了如何让进程免受 HUP 信号的影响,但是如果有大量这种命令需要在稳定的后台里运行,如何避免对每条命令都做这样的操作呢? 解决方法: 此时最方便的方法就是 screen 了。简单的说,screen 提供了 ANSI/VT100 的终端模拟器,使它能够在一个真实终端下运行多个全屏的伪终端。screen 的参数很多,具有很强大的功能
  1. screen //新建一个名叫 test 的session,并马上进入 screen -S test //创建一个名叫 test 的session,但暂不进入,可用于系统启动脚本里 screen -dmS test //列出当前所有session screen -ls //接入(attach)一个名为test会话 screen -r test //远程脱离(detach) test 会话 screen -d test //脱离(detach)当前会话,将目前的 screen session (可能含有多个 windows) 丢到后台执行 CTRL+a然后d //查看 screen 版本号 screen -v //如果由于某种原因其中一个会话死掉了(例如人为杀掉该会话),这时screen -list会显示该会话为dead状态。使用screen -wipe命令清除该会话: screen -wipe