Linux(入门基础):89---任务管理(&、jobs、fg、bg、kill、nohup)

一、将执行的命令丢到后台中执行(&)

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查看后台任务,发现还存在

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/88357358