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

 

You may also like...

发表评论