美文网首页
nohup 和 &

nohup 和 &

作者: sky_storming | 来源:发表于2022-05-09 14:10 被阅读0次
    一、nohup
    • 用途:运行命令,忽略挂起信号(不挂断的运行命令,即永久执行)。
      运行 nohup --help
      Run COMMAND, ignoring hangup signals. 可以看到是“运行命令,忽略挂起信号”

    就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行

    • 语法:nohup Command [Arg ...] [ &]
      无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。

    如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

    如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。

    • 退出状态:该命令返回下列出口值:   
        126 可以查找但不能调用 Command 参数指定的命令。   
        127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。   
        否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。
    二、&
    • 用途:在后台运行。&是指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出

    那么,我们可以巧妙的吧他们结合起来用就是
    nohup COMMAND &
    这样就能使命令永久的在后台执行

    举个例子nohup tail -f nohup.out
    然后退出登录,再连接,用ps -ef 你会还能看到在运行
    ps -ef
    root 3457 1 0 18:20 ? 00:00:00 tail -f nohup.out

    另外,nohup执行后,会产生日志文件nohup.out,把命令执行中的消息保存到这个文件中,一般在当前目录下,如果当前目录的nohup.out文件不可写,那么自动保存到执行这个命令的用户的home目录下,即输出重定向到 $HOME/nohup.out 文件中,例如root的话就保存在/root/下

    这个我们常在运行命令和脚本中常用到的

    nohup 应对的就是突然断网或者关闭终端时屏蔽发送给后台任务的 SIGHUP 信号进而使任务不中断继续运行。
    exit 或者 logout 命令正常退出的话根本用不着 nohup,你的 & 运行的命令都不会被中断。不信你可以 command & 后 exit,再次登录,ps 查看一下命令肯定还在后台跑。
    简单来说,如果你使用的是 exit 或者 logout 命令正常登出,系统只会向前台任务发送 SIGHUP 信号,& 到后台的任务时不会收到 SIGHUP 信号的。如果你强行关闭的窗口或者断网了,系统会向你的前后台任务都发送 SIGHUP 信号,此时如果使用了 nohup 去运行任务,nohup 会屏蔽 SIGHUP 信号,任务也就不会被中断了。

    三、Linux nohup、&、 2>&1是什么?

    基本含义

    /dev/null 表示空设备文件
    0 表示stdin标准输入
    1 表示stdout标准输出
    2 表示stderr标准错误

    file 表示将标准输出输出到file中,也就相当于 1>file

    2> error 表示将错误输出到error文件中

    2>&1 也就表示将错误重定向到标准输出上

    2>&1 >file :错误输出到终端,标准输出重定向到文件file,等于 > file 2>&1(标准输出重定向到文件,错误重定向到标准输出)。

    & 放在命令到结尾,表示后台运行,防止终端一直被某个进程占用,这样终端可以执行别到任务,配合 >file 2>&1可以将log保存到某个文件中,但如果终端关闭,则进程也停止运行。如 command > file.log 2>&1 & 。

    nohup放在命令的开头,表示不挂起(no hang up),也即,关闭终端或者退出某个账号,进程也继续保持运行状态,一般配合&符号一起使用。如nohup command &。

    相关文章

      网友评论

          本文标题:nohup 和 &

          本文链接:https://www.haomeiwen.com/subject/blzhqctx.html