详解nohup和& 区别

  • nohup

    1. 解释

      不挂断地运行命令。no hangup的缩写,意即“不挂断”。

      nohup运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号

    2. 语法

      nohup Command [ Arg ... ] [ & ]

      例如:

      nohup tail -f nohup.out
      
  • &

    1. 解释

      是指在后台运行

    2. 语法

      Command [ Arg ... ] [ & ]

      例如:

      sh test.sh &

  • nohup 和 & 的区别:

    • 免信号的区别

      • nohup的意思是忽略SIGHUP信号, 所以当运行nohup ./a.out的时候, 关闭shell(关闭会话session), 那么start.sh进程还是存在的(对SIGHUP信号免疫)。 但是, 要注意, 如果你直接在shell中用Ctrl C, 那么start.sh进程也是会消失的(因为对SIGINT信号不免疫)
      • &的意思是在后台运行, 什么意思呢? 意思是说, 当你在执行 ./a.out & 的时候, 即使你用ctrl C, 那么start.sh照样运行(因为对SIGINT信号免疫)。 但是要注意, 如果你直接关掉shell后, 那么,start.sh进程同样消失。 可见, &的后台并不硬(因为对SIGHUP信号不免疫)。
    • 输入与输出

      • nohup sh test.sh 
        

        将sh test.sh任务放到后台,关闭标准输入,前台不再能够接收任何输入(标准输入),重定向标准输出和标准错误到当前目录下的nohup.out文件,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。即使关闭xshell退出当前session依然继续运行。

      • sh test.sh & 
        

        将sh test.sh任务放到后台 ,即使关闭xshell退出当前session依然继续运行,但标准输出和标准错误信息会丢失

      • nohup sh test.sh & 
        

        将sh test.sh任务放到后台,但是依然可以使用标准输入,前台能够接收任何输入,重定向标准输出和标准错误到当前目录下的nohup.out文件,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。即使关闭xshell退出当前session依然继续运行。

      总结
      使用&后台运行程序:

      • 结果会输出到终端
      • 使用Ctrl + C发送SIGINT信号,程序免疫
      • 关闭session发送SIGHUP信号,程序关闭

      使用nohup运行程序:

      • 结果默认会输出到nohup.out
      • 使用Ctrl + C发送SIGINT信号,程序关闭
      • 关闭session发送SIGHUP信号,程序免疫

      平日线上经常使用nohup和&配合来启动程序

      • 同时免疫SIGINTSIGHUP信号

你可能感兴趣的:(详解nohup和& 区别)