一、将执行的命令丢到后台中执行(&)
1.方法
- 在完整的命令之后加上&号,该命令就会跑到后台去执行。跑到后台执行的命令会开启一个新的进程
2.备注
- 这个命令跑到后台执行之后,会产生一个任务号码,任务号码放置在[]中,[]后面的是该后台任务的PID
- 命令执行产生的信息都会输出到前台的命令行上
- 注意:与用户有交互的程序不能丢到后台执行,例如vim丢到后台执行没意义,因为不能与用户交互。但是可以丢到后台去暂停
3.&配合数据流重定向使用
- 虽然命令跑到后台执行了,但是命令产生的信息还是会在前台的命令行上显示,所以为了数据不在前台的命令行上显示以影响前台的工作,因为可以采用数据流重定向来将产生的信息输出到一个文件中
- 当然,还是根据自己的需求而定
4.演示案例
- 案例一:不使用数据流重定向
- 输入命令之后,可以看到第一行,这个任务的编号为1,进程PID为3470。但是因为没有用数据流重定向,所以数据都会输出到屏幕上
- 等全部任务都完成之后,按一下回车,就会出来这一行信息:1就是任务编号,任务完成就显示Done
- 案例二:使用数据流重定向
- 使用数据流重定向之后,数据灭有输出到屏幕。产生了一个任务编号为1,PID为3548的进程
- 执行完之后再按一下回车,任务完成信息显示在屏幕上
二、将前台的任务丢到后台中暂停(ctrl+z)
1.介绍
- 我们可以将当前台前正在执行的任务丢到后台暂停,等要用的时候再拿出来
- 例如:我们使用vim编辑文件时,突然不想编辑了,就可以将这个任务丢到后台暂停起来
2.方法
- 输入命令之后,按ctrl+z
3.演示案例
- 案例一:使用vim编辑文件时,将编辑任务丢到后台暂停
- 我们输入vim ~/.bashrc之后回车进入vim编辑器,然后在vim的一般模式下输入ctrl+z,就会将该编辑任务丢到后台中
1 +/- Stopped/run 任务编号 +:代表最近一个被丢到后台的任务
-:代表第二个被丢到后台的任务
第三个任务以以后就不会显示符号了
表示这个任务的状态
Stoppend:暂停
run:运行
- 案例二:承上,再将一个查找任务丢到后台去
- 我们将一个查找任务丢到后台去
三、查看目前后台中的任务(jobs)
1.命令格式
- jobs [选项]
相关选项
- -l:除了列出任务编号与命令串之外,同时列出这个后台任务的PID
- -r:仅列出后台run的任务(run)
- -s:仅列出后台中暂停的任务(stop)
2.演示案例
- 查看当前后台的任务
- 格式
第一部分:任务编号 第二部分:PID 第三部分:任务状态 第四部分:任务的命令 []内为编号,[]后面的字符
+:代表最新一个被丢到后台的任务
-:倒数第二个被丢到后台的任务
倒数第二个及之前的任务不会显示字符
Stoppend:暂停
Running:运行中
Exit:结束
Killed:被删除的
四、将后台任务拿到前台来处理(fg)
1.格式
- fg %任务编号
2.演示案例
- 将任务编号为1的任务拿到前台执行,然后再放回后台
- 第一步:将任务1拿出来执行,然后再按住ctrl+z放回后台中
- 第二步:查看后台任务。(因为任务1是最新被拿到后台的,所以任务1后面显示+号)
五、将一个后台的任务变为运行状态(gb)
1.格式
- gb %任务编号
2.注意事项
- 任务还是在后台运行,不是在前台运行。在后台运行之后,命令后面会显示一个&符号
- 这个命令其实与使用&号把任务丢到后台执行是一样的
3.演示案例
- 我们我们查询文件,然后用数据流重定向将信息输出到文件中,不让数据再前台显示
- 第一步:输入命令。回车之后立即按下ctrl+z将这个任务丢到后台暂停
- 第二步:查看后台任务
- 第三步:使3号任务在后台运行
- 第四步:再查看一下后台任务,发现任务在运行(running),并且后面有一个&符号代表在后台执行。再过一会就会结束退出(Exit),再过一会就会消失
六、管理后台的任务(kill)
1.功能
- 可以使用这个命令让后台的任务重新启动、删除等等
- kill是通过发出信号(signal)给后台来执行相关的操作的
2.命令格式
- kill [信号] %任务编号
- kill -l
相关信号:信号可以用数字,也可以用字母表示
- -1:重新读取一次参数的配置文件(类似reload)
- -2:代表由键盘输入ctrl+c同样的操作,意思为在程序中按下ctrl+c
- -9:立即强制删除一个任务(只有当不知道怎么去结束这个任务的时候才使用这个任务)
- -15:以正常的方式终止一项任务,任务会继续执行直至到结束退出(如果不写信号时,是默认信号)
相关参数与选项
- -l:列出当前kill可以使用的信号有哪些
3.演示案例
- 案例一:将编号为2的任务删除
- 案例二:以正常的方式结束任务1,但是任务1不能被结束,我们再以强制的方式结束任务1
- 第一步:正常结束这个任务,发现无法结束,依然存在
原因:-15是正常的结束一个任务,但是我们使用vim的时候将其抛到后台暂停会产生一个.swp的文件。如果我们使用-15来正常结束这个文件,那么.swp文件应该能被主动删除。但是这个文件不会主动删除,因此只能强制删除
- 第二步:使用-9强制结束这个任务(模仿vim编辑器非正常退出),那么.swp文件就会存在,就可以强制删除了
七、脱机管理问题(nohup)
1.概念
- 上面说的那些任务都只是在bash的后台执行,而不是在系统的后台执行,所以,当你的bash退出之后,这些任务也就死亡了,不存在了
- 如果你想要这个任务在脱机/注销系统之后还存在不会消亡,那么你可以at计划任务来处理,或者使用nohup这个命令
2.命令格式
- nohup [命令] //任务在终端前台中进行
- nohup [命令] & //任务在终端后台中进行
3.演示案例
- 第一步:我们建立一个脚本文件,这个脚本可以进行500s
- 第二步:将这个任务丢到后台中处理,使用pstree查看后台任务。然后注销计算机(ignoring那一行的信息是:因为进程最后会输出一个信息,但是nohup与终端无关,因此这个信息的输出就会被定向至~/nohup.out中)
- 第三步:重新进入系统后,使用pstree查看后台任务,发现还存在