本文整理至:《鸟哥的Linux私房菜:基础学习篇(第三版)》
要注意癿是,我们在工作管理当中提到癿『背景』指是在终端机模式下可以避免 [crtl]-c 中断的一个情境,并不是放到系统的背景去喔!所以,工作管理的背景依旧不终端机有关啦! 在这样癿情况下,如果你是以进程联机方式连接到你癿 Linux 主机,并且将工作以 & 癿方式放到背景去, 请问,在工作尚未结束癿情况下你脱机了,该工作还会继续迚行吗?答案是『否』!不会继续迚行,而是会被中断掉。
那怎么办?如果我的工作需要进行一大段时间,我又不能放置在背景底下,那该如何处理呢? 你可以尝试使用 nohup 这个指令来处理喔!这个 nohup 可以让你在脱机或注销系统后,还能够让工作继续迚行。他的语法有点像这样:[root@www ~]# nohup [指令与参数] <==在终端机前景中工作
[root@www ~]# nohup [指令与参数] & <==在终端机背景中工作
我们来尝试玩一下底下的任务吧!
# 1. 先编辑一支会『睡着 500 秒』癿程序:
[root@linux ~]# cat 111.sh
#!/bin/bash
/bin/sleep 500s
/bin/echo "I have slept 500 seconds."
# 2. 丢到背景中去执行,并且立刻注销系统:
[root@linux ~]# chmod 777 111.sh
[root@linux ~]# nohup ./111.sh &
[1] 3393
[root@linux ~]# nohup: appending output to “nohup.out”
[root@linux ~]#
[root@linux ~]#
[root@linux ~]# exit
如果你再次登入的话,再使用 ps -l 去查阅你的程序,会发现 111.sh 还在执行中喔!并不会被中断掉! 由于我们的程序最后会输出一个讯息,但是 nohup 和终端机其实无关了, 因此这个讯息的输出就会被导向『 ~/nohup.out 』,所以你才会看到上述指令中 如果你想要在背景工作在你注销后还能够继续的执行,那举使用 nohup 搭配 & 是不错的运作情境喔! 可以参考看看!
[root@linux ~]# ps -ef | grep 111.sh
root 3393 1 0 23:43 ? 00:00:00 /bin/bash ./111.sh
root 3445 3400 0 23:45 pts/0 00:00:00 grep 111.sh
[root@linux ~]# cat nohup.out
I have slept 500 seconds.