任务管理(job control)是用在bash环境下的,我们登录系统获取bash shell之后,任务管理可以帮助我们在单一终端下同时执行多个任务的操作管理;
比如你登录bash之后可以一边复制文件一边查找文件,一边编译,一边在vim写文档。
在执行任务管理的操作时,其实每个任务都是目前bash的子进程,彼此之间是相关性的,我们无法用任务管理的方式由tty1的环境去管理tty2的bash;
在CentOS下可以登录六个终端(最多),所以理论上你当然也可以用不同的终端去执行不同的任务,无需使用什么任务管理,但是居安思危啊兄弟盟,万一有一天root就给了你一个tty就需要用到job control了;
如果只用一个终端,我们把出现提示字符让你操作的环境称之为前台(foreground),至于其他的任务就要放入后台(background)去暂停或者运行,要放在后台的程序不能有与用户交互的部分,要不然给他扔background没人和他交互他很寂寞的;而且放到后台的任务是不可以用crtl+c来终止的;
执行bash的任务管理时需要注意:
这些任务所触发的进程必须来自你shell的子进程(只管理自己的bash)
前台:可以控制与执行命令的这个环境成为前台的任务(foreground)
后台:可以自动执行的任务,无法使用ctrl+c终止,可以使用bg,fg调用该任务
后台中【执行】的进程不可以等待terminal或shell的输入
job control的管理
bash只能够管理自己的任务而不能管理其他的bash任务,所以你即使是root也不能将别人bash下面的job拿过来执行;
命令:
1.将命令扔到后台执行:&
例:将/etc/备份为/tmp/etc.tar.gz,这个过程放到后台执行
tar -zpcf /tmp/etc.tar.gz /etc &
像这样在一条命令后面加一个&就可以把这条命令丢到后台执行,但是执行这个命令的提示字符仍旧会显示在屏幕上,此时最好使用重定向,把输出重定向到一个文件里,方便日后查询;
2.将目前的任务丢到后台中暂停:ctrl -z
例:在使用vim的过程中想要退出来,在vim的一般模式下按ctrl+z
此时屏幕上会显示
[1]+ stopped vim
[1]表示这是第一个任务,+表示他是最近一个被丢到后台的任务,stopped表示目前这个任务的状态,最后则是任务的名称(倒数第二被丢到后台的任务有-修饰,倒数第三以及更以前的就没有了);
将后台任务拿到前台处理:fg %任务号码(数字)
请注意,百分号是可有可无的
让任务在后台下的状态变成运行中:bg
善用jobs观察任务的状态;
管理后台当中的任务:kill
kill -signal %jobnumber
kill -l
-l:列出当前可以使用的signal
signal:-1,重新读取一次参数的配置文件;-2,代表由键盘输入[ctrl] -c同样的操作;-9:立刻强制删除一个任务;-15,以正常的方式终止一项任务,与-9不一样;
需要注意的是kill 数字这种方式执行数字代表的是PID!!!!!!!!!
任务号需要用%;
关于暂停还有一条有用的命令:jobs [-lrs]
-l表示出了列出job number与命令串之外,同时列出PID号码;
-r仅列出正在后台run的任务
-s仅列出正在后台中暂停的任务
3.脱机管理
我们这里提到的后台是bash后台而不是系统后台,因此退出bash之后放到bash后台的任务就没得了;
/*
最后,我觉得有必要了解一下tty这个概念
使用linux的话,shell,tty,console,terminal这几个概念几乎逃不开….
shell,英文含义就是壳,贝壳,总之就是在外层的一些东西,shell这个概念是相当于内核来讲的,内核会调度使用硬件,但是如果直接吧硬件暴露给所有用户的话随意操作会引发危险,所以由shell,把核心包裹起来,大家通过shell去拜托核心操作硬件完成任务;
而tty,terminal,console这三个概念就比较模糊了
terminal,直接翻译就是终端(其实航站楼其实好像也叫terminal),终端就是用来处理计算机输入输出的设备,但是根据具体使用的情况,终端大致分为四种:
1.就是你电脑主机上连着的键盘和显示屏;
2.使用串口的远程终端,把一个主机A用串口接到主机B上,在主机B上用虚拟终端操作主机A;
3.用TCP/IP承载的远程终端;
4.在图形界面下打开的命令行窗口;
前两个叫做物理终端,因为是有物理连接存在的;而第三个叫做”伪终端”,请注意网卡并不与终端直接相关,所以第三类终端不能被称为物理终端;
第四类是大家使用发行版linux(带桌面的那种)所接触到的终端,他也属于”伪终端”
console,控制台,显示系统消息的终端就叫控制台;总之,控制台是终端的一个真子集;控制台是一个虚拟的终端;如果你使用没有安装桌面的linux 的话,一打开就是console
目前linux已经弱化了终端和控制台的概念,把tty当成terminal就好;
*/
