转自:nohup和&的区别 https://blog.csdn.net/zhang_red/article/details/52789691
nohup是永久执行
&是指在后台运行
运行 nohup –help
Run COMMAND, ignoring hangup signals. 可以看到是“运行命令,忽略挂起信号”
就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行
&是指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出
那么,我们可以巧妙的吧他们结合起来用就是
nohup COMMAND &
这样就能使命令永久的在后台执行
举个例子
使用natapp内网穿透的时候想让程序一直在后台执行,即使ssh连接关闭也可以执行
root@VM-7-ubuntu:/home/ubuntu# nohup ./natapp -authtoken=xxxxxxxxx -log=stdout &
root@VM-7-ubuntu:/home/ubuntu# ps -ef | grep natapp
root 2155 1 0 Mar26 ? 00:00:07 ./natapp -authtoken=xxxxxxxxx -log=stdout
root 2259 14858 0 21:41 pts/0 00:00:00 grep --color=auto natapp
root@VM-7-3-ubuntu:/home/ubuntu#
想停止运行也很简单
root@VM-7-ubuntu:/home/ubuntu# kill -9 2155
这样就能终止程序的运行了
另外,nohup执行后,会产生日子文件,把命令的执行中的消息保存到这个文件中,一般在当前目录下,如果当前目录不可写,那么自动保存到执行这个命令的用户的home目录下,例如root的话就保存在/root/下
这个我们常在运行命令和脚本中常用到的