Linux_控制作业(管理)
一、作业控制
1、作业控制与回话
1️⃣:作业控制是shell的一种功能,它允许单个shell实例运行和管理多个命令
2️⃣:作业与在sehll提示符中输入的每个管道相关联、该管道中的所有进程均是作业的一部分,并且是同一个进程组的成员
3️⃣:如果在shell提示符中仅输入了一条命令,则这条命令可视为命令的最小管道;该命令将是该作业的唯一成员
4️⃣:一次只能有一个作业从特定终端窗口读取输入和键盘生成的信号。属于该作业的进程是该控制终端的前台进程
2、作业分类
1️⃣:前台作业:通过终端启动,且启动后一直占据了命令提示符
2️⃣:后台作业:可以通过终端启动,但启动之后,释放命令提示符,后续的操作在后台完成
- 此类作业虽然被送往后台运行,但其依然与终端相关。如果希望送往后台后,剥离与终端的关系需要执行(nohup COMMAND &)
3、后台运行作业演示
//在命令后跟上&符号可以生成一个后台作业 [root@localhost ~]# sleep 1000 & [1] 2247 [root@localhost ~]# jobs [1]+ 运行中 sleep 1000 & // jobs命令用于显示当前所有的后台作业
4、fg —— 将后台作业调至前台运行
[root@localhost ~]# sleep 1000 & [1] 2284 [root@localhost ~]# jobs [1]+ 运行中 sleep 1000 & [root@localhost ~]# fg sleep 1000 //光标会在这一行卡主,直到超过1000秒; //当只有一个后台作业时,直接使用fg命令,不跟任何参数即可将后台作业调至前台运行 //当有多个后台作业时,必须加上%num(num是每个后台作业的编号,也就是[]中的数字) [root@localhost ~]# sleep 1000 & [1] 2313 [root@localhost ~]# sleep 1100 & [2] 2314 [root@localhost ~]# sleep 1200 & [3] 2316 [root@localhost ~]# jobs [1] 运行中 sleep 1000 & [2]- 运行中 sleep 1100 & [3]+ 运行中 sleep 1200 & [root@localhost ~]# ps -ef | grep sleep root 2313 2084 0 10:40 pts/2 00:00:00 sleep 1000 root 2314 2084 0 10:40 pts/2 00:00:00 sleep 1100 root 2316 2084 0 10:40 pts/2 00:00:00 sleep 1200 root 2318 2084 0 10:41 pts/2 00:00:00 grep --color=auto sleep // 现在我想让第二个sleep放到前台运行 [root@localhost ~]# fg %2 sleep 1100 //如果多个后台作业,不加参数,直接用fg就直接调取最后一个作业到前台运行 [root@localhost ~]# jobs [1] 运行中 sleep 1000 & [2]- 运行中 sleep 1100 & [3]+ 运行中 sleep 1200 & [root@localhost ~]# fg sleep 1200
5、Ctrl+z —— 将前台作业放到后台运行
//使用ctrl+z可将前台进程发送到后台,此时作业将处于停止状态 [root@localhost ~]# sleep 1000 & [1] 2345 [root@localhost ~]# jobs [1]+ 运行中 sleep 1000 & [root@localhost ~]# fg sleep 1000 ^Z // 此处按ctrl+z [1]+ 已停止 sleep 1000 [root@localhost ~]# jobs [1]+ 已停止 sleep 1000
6、bg —— 使后台已停止的作业重新运行
[root@localhost ~]# jobs [1]+ 已停止 sleep 1000 [root@localhost ~]# bg [1]+ sleep 1000 & [root@localhost ~]# jobs [1]+ 运行中 sleep 1000 & //当有多后台作业的时候,需要使用bg+%num(num是后台作业的编号,也就是[]中的数字) [root@localhost ~]# jobs [1] 运行中 sleep 1000 & [2]- 已停止 sleep 1100 [3]+ 已停止 sleep 1200 [root@localhost ~]# bg %2 [2]- sleep 1100 & [root@localhost ~]# jobs [1] 运行中 sleep 1000 & [2]- 运行中 sleep 1100 & [3]+ 已停止 sleep 1200 //如果不加参数,只是使用bg,那么久从后往前逐一将后台停止的作业重新运行 [root@localhost ~]# jobs [1] 已停止 sleep 1000 [2]- 已停止 sleep 1100 [3]+ 已停止 sleep 1200 [root@localhost ~]# bg [3]+ sleep 1200 & [root@localhost ~]# bg [2]+ sleep 1100 & [root@localhost ~]# bg [1]+ sleep 1000 &
7、终止后台作业
//kill加上作业号可以手动杀死指定作业 [root@localhost ~]# jobs [1] 运行中 sleep 1000 & [2] 运行中 sleep 1100 & [3]+ 已停止 sleep 1200 [4]- 已停止 sleep 1300 [root@localhost ~]# kill %1 [root@localhost ~]# kill %2 [root@localhost ~]# jobs [3]+ 已停止 sleep 1200 [4]- 已停止 sleep 1300 //将后台作业放到前台,按Ctrl+c终止作业任务 [root@localhost ~]# jobs [3]- 运行中 sleep 1200 & [4]+ 已停止 sleep 1300 [root@localhost ~]# fg %3 sleep 1200 ^C //在这按Ctrl+c [root@localhost ~]# jobs [4]+ 已停止 sleep 1300 [root@localhost ~]# fg %4 sleep 1300 ^C //这里也是一样,按CTRL+c [root@localhost ~]# jobs [root@localhost ~]#
8、jobs命令的结果
- + //命令将默认操作的作业
- - //命令将第二个默认操作的作业