Shell作业调度控制

挂起一个前台作业
Ctrl+z

查看挂起的作业

jobs -l

恢复一个被挂起的作业
fg [job_num] 例如 fg 1

 

从操作系统的角度来讲,作业是计算机系统中运行的一项用户任务。在unix/linux系统中作业可以定义为:在命令行中输入的一个或一组命令。

   由于linux是一个真正的多用户多任务的操作系统,所以可以同时运行多个任务,但是在前台启动一个作业时,标准输入和标准输出都被锁定,它们被当前作业所独占,直至该作业结束。为此,linux定义了两种类型的作业:前台作业和后台作业。

  一 前台作业

  我们一般在终端执行的程序都是前台作业,在它运行过程中无法启动其他作业,启动前台作业也相当简单,输入命令然后回车。

  ★挂起一个前台作业

  为了挂起一个前台作业,只需按下Ctrl+z。这个在我们处于全屏编辑模式下很有用,可以挂起编辑作业,完成其他任务。这样回到终端后,我们执行jobs -l就可以

查看被挂起的作业的相关信息。

  ★恢复一个被挂起的作业

  恢复一个挂起的作业,只需在终端执行前台命令fg。

  ★终止一个前台作业

  终止一个前台作业,只需按下Ctrl+c,作业终止后,键入回车激活命令行提示符。

二 后台作业

  当一个作业需要占用较长时间的时候也许我们需要后台运行该命令以完成其他的任务。

  ★启动一个后台作业

  启动一个后台作业,只需在命令的后面加上符号&。特别注意,如果该作业有参数,则&号紧跟在最后一个参数之后。命令结尾与&之间不留空格。

需要注意的是,前台作业和后台作业是共享键盘,显示器等资源的,后台作业和前台作业为了分的CPU时间片是要竞争竞争,所以后台作业发送给显示器的任何消息因此将与来自当前作业的消息混在一起,这可能很快变的很混乱。一个后台作业要请求用户输入必须将之移到前台。 强烈建议后台作业的输入和输出必须重定向,最好将终端输出重定向文件或者null设备。你可以试试不带参数的后台ping命令,例如ping localhost&,呵呵,等着闪屏吧!
★挂起,重启,终止后台作业

  为了挂起一个后台作业用stop命令,重启用bg命令,终止用kill命令。三种命令都需要一个%号大头的作业号,作业号可以用jobs查看

★作业前后台状态切换

  一个被挂起的作业可以在前台和后台状态间切换。一旦作业被挂起,就可以使用bg命令将作业起到后台执行。移动一个后台任务到前台自然用fg命令了。

★多后台作业

   当多个后台作业运行时,需要用到作业号,用以标示想要处理的作业。

三作业队列

  使用jobs [-l]命令可以查看当前作业及其状态。每个作业有相应的作业号,当前值,运行状态。

  ★当前值

  作业列表中的+号,-号称为当前值标志。+号说明改作业位当前默认作业,-号说明当前默认作业完成后将替代当前默认作业。这里=,-号倒是有点进程优先级

的味道了。当一个作业被挂起就地动称为默认的当前值标志,如果多个作业被挂起则按照挂起的顺序一次赋予相应的标识值,最先挂起的为加号,较早的为减号,按优先级理解起来很容易明白。

  ★使用作业号

  前面提到的几个命令都可以加上作业号参数。作业号有%号开头,并与命令之间有一空格隔开。默认作业号可表示位:%+,或者%%,包含减号当前值的作业可用%-表示。例如结束当前默认作业:kill %%或者kill %+。

  ★作业状态生命周期

     一个作业可能处于三种状态之一:前台,后台,挂起。当一个作业启动,它在前台运行,在运行期间作业可以被挂起,终止它,或者运行直至自动结束掉。挂 起的作业也可转到后台继续执行。一个作业从创建到结束完全可以在人工干预下执行,我们可以更好的控制自己的作业任务,以便是Linux更好的为我们服务我 们也可以提高工作效率。

  本文讲的都是浅显的概念问题,所以关键还是要靠自己实践。当然,这只是给新手的参考,高手们就可以路过了!

你可能感兴趣的:(shell)