Linux学习-工作管理

有用的工作管理,job control。

什么是工作管理

开启一个 bash,就可以操作 Linux 系统,那么怎么同时让系统执行多个任务呢?没错,这就是工作管理的内容。
注意:

- 工作管理的程序只能是来自你自己的 shell 的子程序(只能管理自己的 bash)
- 前景:foreground
- 背景:background
- 背景中运行的程序的状态又可以分为“暂停(stop)”和“运行中(running)”

怎么将命令丢到背景中运行

上一篇已经说了就是直接在命令后加上一个&
有图有真相
命令执行完成后,终端会有相应显示:
命令执行完成
这样确实把命令丢到了背景中运行了,但是命令的输出却还是会显示在终端上,可以使用数据流重导向来将其输出导向到指定文件中。

将目前的工作丢到背景中暂停:[ctrl]+z

使用 vim 编辑文件时,在一般模式下,按下 [ctrl]+z 可将目前的编辑工作丢到背景中,并且其是暂停状态。

观察目前的背景中的工作的状态:jobs

jobs
图中,+代表最近一次被放到背景中的工作,-代表最近第二个放到背景中的工作,第三个以及后面的就不会有 +/- 符号存在了。而且,仅输入 fg 命令时,带有 + 符号的工作会被拿到前景来处理。

将工作拿到前景来处理:fg

fg

让工作在背景下的状态变成运行中:bg

[ctrl]+z 可以将目前的工作丢到背景中,但是工作在背景中是暂停状态的。如何使其变成运行中状态呢?
bg
图中 bg %3; 的输出会让命令最后带上 & ,所以其会变成运行中状态了

杀死想杀死的工作:kill

kill
-9与-15的区别:在使用 vim 编辑一个文件时,会产生一个 .filename.swp 的临时文件,-15杀死这个 vim 进程,.filename.swp 也会正常被清理掉,而-9则不会。
注意:kill 后面接的数字默认会是 PID,如果想要管理 bash 的工作,就得加上 % 了。

离线管理问题

以上我们所说的背景都是相对于当前 bash 所说的,也就是说当前 bash 关闭了,其背景中的程序也会中断,所以这个背景跟系统背景并不相同。如果想关闭终端之后还想让命令继续进行,则需要使用 nohup 了:
nohup
好玩的:
好玩的
这样下次登陆后, sleep500.sh 还在运行中。其中输出的信息会自动重导向到 ~/nohup.out 中。