前言:
&
是指在后台运行;nohup
是永久执行。
用 nohup
运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开 SSH 连接都不会影响他的运行,注意 nohup
没有后台运行的意思;&
才是后台运行。
&
是指在后台运行,但当用户退出(挂起)的时候,命令自动也跟着退出。
那么,我们可以巧妙的把它们结合起来用就是 nohup COMMAND &
,这样就能使命令永久的在后台执行。
下面是我自己的实践:
例1:
[root@localhost ~]# mkdir hui
[root@localhost ~]# cd hui
[root@localhost hui]# touch test.txt
[root@localhost hui]# tail -F -n 0 test.txt &
[1] 16065
在 SecureCRT 中再打开另一个终端输入
[root@localhost hui]# ps -ef(可找到下面这一行)
root 16065 16005 0 22:04 pts/3 00:00:00 tail -F -n 0 test.txt
[root@localhost ~]# echo "hehe" >> hui/test.txt
[root@localhost ~]# echo "haha" >> hui/test.txt
在原来的终端中弹出如下内容,很烦的。。。
[root@localhost hui]# hehe
haha
把原终端关闭后在另一个终端中输入 ps -ef
则那一行消失即命令已退出。你也可以在原终端不关闭情况下用命令 kill -9 16065
补充:如果你不想在原终端不时的弹出内容,你可以这样做
[root@localhost hui]# tail -F -n 0 test.txt 1>/dev/null 2>&1 &
说明:1>/dev/null
的意思将标准输出重定向到 /dev/null
中,2>&1
的意思是将错误输出也和标准输出重定向到相同的地方。
例2:
[root@localhost hui]# nohup tail -F -n 0 test.txt
nohup: appending output to `nohup.out'
输入符一直在这一行闪烁(无法退出只能按 Ctrl+c
都能将其停止但该命令也被终止)
打开另一个终端
[root@localhost ~]# ps -ef
root 16102 16005 0 22:08 pts/3 00:00:00 tail -F -n 0 test.txt
[root@localhost ~]# echo "haha" >> hui/test.txt
(无论哪个终端都不会弹出 haha 而是写入到了 hui/nohup.out
文件中。一般在当前目录下,如果当前目录不可写,那么自动保存到执行这个命令的用户的 home 目录下,例如 root 的话就保存在 /root/
下)
关闭原终端在刚开的另一终端再输入 ps -ef
后那一行依旧存在,只能用命令 kill -9 16102
或者不关闭原终端在输入符闪烁的时候按 Ctrl+c
都能将其停止
例3
[root@localhost hui]# nohup tail -F -n 0 test.txt &
[1] 16164
[root@localhost hui]# nohup: appending output to `nohup.out'
# 输入符一直在这一行闪烁
# (按Ctrl+c或者回车键退回到命令行但命令并没有退出)
打开另一个终端
[root@localhost ~]# ps -ef
root 16164 16075 0 22:21 pts/2 00:00:00 tail -F -n 0 test.txt
[root@localhost ~]# echo "haha" >> hui/test.txt (无论哪个终端都不会弹出haha)
# 关闭原终端在刚开的另一终端再输入ps -ef后那一行依旧存在,只能用命令kill -9 16164使其停止