Linux中nohup与&的用法和区别详解

1. nohup和&的概念

在Linux中,nohup和&是用来在后台运行程序的两种方式。在执行长时间运行的程序时,如果在执行过程中关闭了终端,程序就会停止运行。为了避免这种情况,可以使用nohup命令或者将程序放在后台运行。

1.1 nohup命令

nohup命令是用来忽略挂断信号的,可以让程序在后台一直运行,即使关闭了终端。使用nohup命令执行程序的语法为:

nohup command [args] &

其中,command是要执行的命令,args是命令的参数。&符号用来将命令放到后台运行。

1.2 &符号

在Linux中,可以使用&符号将一个命令放到后台运行。使用&符号的语法为:

command &

其中,command是要执行的命令。

2. nohup和&的区别

虽然nohup命令和&符号都可以将程序放到后台运行,但是它们存在一些区别:

2.1 关闭终端时的影响

使用nohup命令执行程序时,关闭终端不会对程序运行产生影响,程序会继续在后台运行。而使用&符号将程序放到后台运行时,关闭终端会导致程序停止运行。

2.2 输出的处理

使用nohup命令执行程序时,程序的输出会被重定向到一个名为nohup.out的文件中。而使用&符号将程序放到后台运行时,程序的输出会显示在终端上。

2.3 作用范围

nohup命令适用于任何可以在终端中执行的命令。而&符号只适用于单个命令的后台执行。

2.4 进程组号

使用nohup命令执行程序时,程序会成为一个新的进程组的组长,进程组号会发生变化。而使用&符号将程序放到后台运行时,进程组号不会发生变化。

3. 使用示例

3.1 使用nohup命令

假设有一个名为test.sh的脚本文件,内容如下:

#!/bin/sh

echo "Start"

sleep 10

echo "End"

执行以下命令将test.sh脚本放到后台运行:

nohup ./test.sh &

执行上述命令后,会在当前目录生成一个名为nohup.out的文件,其中包含了test.sh脚本的输出。关闭终端后,test.sh脚本仍然在后台运行。

3.2 使用&符号

假设有一个名为test.sh的脚本文件,内容如下:

#!/bin/sh

echo "Start"

sleep 10

echo "End"

执行以下命令将test.sh脚本放到后台运行:

./test.sh &

执行上述命令后,test.sh脚本的输出会显示在终端上。关闭终端后,test.sh脚本停止运行。

4. 总结

nohup命令和&符号都可以将程序放到后台运行,避免了关闭终端导致程序停止运行的问题。两者的区别在于关闭终端时的影响、输出的处理、作用范围以及进程组号的变化。根据具体需求选择合适的方式来运行程序。

操作系统标签