要注意的是,我们在工作管理当中提到的“背景”指的是在终端机模式下可以避免 [crtl]-c 中断的一个情境, 你可以说那个是 bash 的背景,并不是放到系统的背景去。所以,工作管理的背景依旧与终端机有关。在这样的情况下,如果你是以远端连线方式连接到你的 Linux主机,并且将工作以 & 的方式放到背景去, 请问,在工作尚未结束的情况下你离线了,该工作还会继续进行吗?不会的,会被中断掉。
nohup 可以让你在离线或登出系统后,还能够让工作继续进行。他的语法有点像这样:
上述指令需要注意的是, nohup 并不支持 bash 内置的指令,因此你的指令必须要是外部指令才行。
如果你再次登陆的话,再使用 pstree 去查阅你的程序,会发现 sleep500.sh 还在执行中,并不会被中断掉。由于我们的程序最后会输出一个讯息,但是 nohup 与终端机其实无关了, 因此这个讯息的输出就会被导向“ ~/nohup.out ”,所以你才会看到上述指令中,当你输入 nohup 后, 会出现那个提示讯息。
16.3 程序管理
为什么程序管理这么重要呢?这是因为:
首先,本章一开始就谈到的,我们在操作系统时的各项工作其实都是经过某个 PID 来达成的 (包括你的 bash 环境), 因此,能不能进行某项工作,就与该程序的权限有关了。
再来,如果您的 Linux 系统是个很忙碌的系统,那么当整个系统资源快要被使用光时,您是否能够找出最耗系统的那个程序,然后删除该程序,让系统恢复正常呢?
此外,如果由于某个程序写的不好,导致产生一个有问题的程序在内存当中,您又该如何找出他,然后将他移除呢?
如果同时有五六项工作在您的系统当中运行,但其中有一项工作才是最重要的, 该如何让那一项重要的工作被最优先执行呢?
所以一个称职的系统管理员,必须要熟悉程序的管理流程才行,否则当系统发生问题时,还真是很难解决问题。