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