linux命令 --- nohup 和 命令末尾加 &

nohup:

    nohup是no hang up 的缩写,即:不挂断的意思。以忽略挂起信号的方式执行命令,关闭终端后进程还能继续执行,但是直接在shell中使用ctrl + c 或ctrl + z时,进程会结束。

    被运行的程序的输出信息将不会显示到终端。无论是否将nohup命令的输出重定向到终端,输出都将附加到当前目录下的nohup.out文件中。如果当前目录的nohup.out文件不可写,输出重定向到$HOME/nohup.out文件中。如果没有文件能创建或打开以用于追加,那么command参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。

 

语法

nohup Command [ Arg ... ] [ & ]

 

    nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。 如果不将 nohup 命令的输出重定向,输出将附加到当前目录的nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到$HOME/nohup.out 文件中

 

示例:

[root@test]# nohup ./startup.sh >output 2>&1 & 
nohup: ignoring input and appending output to ‘nohup.out’

解析:

操作系统中有三个常用的流:

  0:标准输入流 stdin

  1:标准输出流 stdout

  2:标准错误流 stderr

注: > test.txt,实际是 1>test.txt的省略用法;< test.txt ,实际是 0 < test.txt的省略用法。

>output :表示将运行./startup.sh的标准输出流写入output中

2>&1 :表示将标准错误流重定向到标准输出流中,因为标准错误(stderr)没有缓冲区,而标准输出(stdout)有

 

&:

    在命令末尾加上&,作用是使进程在后台执行,即使你用ctrl + c, 进程照样运行,因此会丢失标准错误和标准输出。如果是守护进程,断开终端则程序继续运行,如果不是守护进程,断开终端则程序也会被断开停止运行。

 

 

你可能感兴趣的:(Linux)