【Linux】工作管理

  • 在进行工作管理的行为中,其实每个工作都是目前bash的子进程,即彼此间是有相关性的。我们无法以job control的方式由tty1的环境去管理tty2的bash
  • 当只有一个终端时,可以出现提示符让你操作的环境就称为前台(foreground),至于其他工作就可以让你放入后台(background)去暂停或运行。要注意的是,放入后台的工作想要运行时,它必须不能够与用户互动。举例来说,vim绝对不可以在后台里面执行(running)。因为你没有输入数据它就不会跑。而且放入后台的工作是不可以使用[ctrl]+c来终止的。总之,要进行bash的job control 必须要注意到的限制是:
  • 这些工作所触发的进程必须来自于你shell的子进程(只管理自己的bash);
  • 前台:你可以控制与执行命令的这个环境称为前台(foreground)的工作;
  • 后台:可以自己运行的工作,你无法使用[ctrl]+c终止它,可使用bg/fg调用该工作;
    后台中『执行』的进程不能等待terminal/shell的输入(input)

实际运行job控制的命令

直接将命令丢到后台中『执行』的&
$tar -rpcf /tmp/etc.tar.gz /etc &
[1] 8400 <== [job number]/PID
#在中括号内的号码为工作号码(job number),该号码与bash的控制有关
#后续的8400则是这个工作在系统中的PID
  • 在输入一个命令后,在该命令的最后面加上一个『&』代表将该命令丢到后台中,此时bash会给予这个命令一个"工作号码"(job number),就是那个[1]。至于后面那个8400则是该命令所触发的PID了。
  • 如果输入几个命令后,突然出现如下数据
[1]+ Done tar -rpcf /tmp/etc.tar.gz /etc

就代表这个[1]工作已经完成了。

将目前工作丢到后台中『暂停』:[ctrl]+z
  • 按下[ctrl]+z后,屏幕上会出现如下[1]+ Stopped command[1]表示这是第一个工作。而那个+代表最近一个被丢进后台的工作,且目前在后台默认会被取用的那个工作(与fg这个命令有关)。而那个Stopped则代表目前这个工作的状态。在默认状态下,使用[ctrl]+z丢到后台中的工作都是「暂停」的。
查看目前的后台工作状态:jobs
$jobs [-lrs]
参数:
-l:除了列出job number与命令串之外,同时列出PID的好吗
-r:仅列出正在后台run的工作
-s:仅列出正在后台当中暂停(stop)的工作

查看目前的bash当中,所有的工作,与对应的PID

  • 用jobs这个命令可以查看后台中的工作,如果想要知道该job number的PID号码,可以加上-l这个参数。在输出的信息当中,有些任务号码后会有+-号码,+号代表最近被放到后台的工作号码,-代表最近最后第二个被放置到后台中的工作号码。而超过最后第三个以后的工作,就不会有+/-符号的存在了。
将后台工作拿到前台来处理:fg

fg %jobnumber
参数:
%jobnumber:jobnumber为工作号码(数字)。注意,那个%是可有可无的。

先以jobs查看工作,再将工作取出
$jobs
[1]- 10314 Stopped vim ~/.bashrc
[2]+ 10833 Stopped  find / -print
$fg <==默认取出那个+的工作,即[2]
$fg %1 <==直接规定取出的那个工作号码!
让工作在后台的状态变成运行中:bg
  • bg %jobnumber将jobnumer的工作在后台启用
posted @ 2017-04-16 16:17  vincently  阅读(373)  评论(0编辑  收藏  举报