了解一下Linux作业相关知识。

在了解Linux作业之前我们先来了解一下一些Linux的文件描述符和标准输入输出错误。

1. Linux shell标准输入、输出和错

1.1 文件描述符

在linux shell执行命令时,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。由于文件描述符不容易记忆,shell同时也给出了相应的文件名:

文件 文件描述符
标准输入 0(缺省是键盘,为0时是文件或者其他命令的输出)
标准输出 1(缺省是屏幕,为1时是文件)
标准错误 2(缺省是屏幕,为2时是文件)

1.2 文件重定向

文件重定向就是改变程序运行的输入来源和输出地点

1.2.1 输出重定向

命令 作用
cmd > file 标准输出 重定向到file文件
cmd >> file 标准输出重定向追加到file文件
cmd 2 > file 标准错误 重定向到file文件
cmd 2 >> file 标准错误 重定向追加到file文件
cmd > file 2>&1 标准输出和错误 重定向到file文件
cmd >> file 2>&1 标准输出和错误 重定向追加到file文件

1.2.2 输入重定向

命令 作用
cmd < file cmd命令以file文件作为标准输入
cmd < file > file2 cmd命令以file文件作为标准输入,以file2文件作为标准输出
cmd << delimiter 从标准输入中读入,直到遇到delimiter分界符

1.2.3 绑定重定向

命令 作用
cmd > &m 把标准输出重定向到文件描述符m中
cmd < &- 关闭标准输入

2. Linux作业(jobs)控制管理

Linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性。

  • 交互进程——由一个shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。
  • 批处理进程——这种进程和终端没有联系,是一个进程序列。
  • 监控进程(也称守护进程,进程名常以d结尾demon)——Linux系统启动时启动的进程,并在后台运行。
    进程和作业的概念也有区别。一个正在执行的进程称为一个作业,而且作业可以包含一个或多个进程。
    作业控制指的是控制正在运行的进程的行为。比如,用户可以挂起一个进程,等一会儿再继续执行该进程。shell将记录所有启动的进程情况,在每个进程过程中,用户可以任意地挂起进程或重新启动进程。作业控制是许多shell(包括bash和tcsh)的一个特性,使用户能在多个独立作业间进行切换。

    在大多数情况下,用户在同一时间只运行一个作业,即它们最后向shell键入的命令。但是使用作业控制,用户可以同时运行多个作业,并在需要时在这些作业间进行切换。这会有什么用途呢?例如,当用户编辑一个文本文件,并需要中止编辑做其他事情时,利用作业控制,用户可以让编辑器暂时挂起,返回shell提示符开始做其他的事情。其他事情做完以后,用户可以重新启动挂起的编辑器,返回到刚才中止的地方,就象用户从来没有离开编辑器一样。这只是一个例子,作业控制还有许多其他实际的用途。

2.1 将命令放到后台运行的符号 “&”

在bash的环境下,前台指你可以控制的作业,后台指在内存可以自行运行的作业,你无法直接控制它,除非以bg/fg等命令将该作业调用出来。有些命令不应该放在前台,比如使用wget命令下载大文件时(wget加上-b参数启动后即可转入后台执行)用tar命令、unrar批量解压很多文件时或者文件很大时,因为这些操作需要较长的时间完成,而操作不结束你也便无法继续在前台操作Linux,用压缩数据包命令举个栗子。

1
2
3
4
richie@ubuntu:~/Desktop$ tar -zpcf linuxSJ2.tar.gz linux\ shangji &
[1] 24221
richie@ubuntu:~/Desktop$ jobs
[1]+ Done tar -zpcf linuxSJ2.tar.gz linux\ shangji

但是我如果用tar -zcvf linuxSJ2.tar.gz linux\ shangji &,他会终端输出执行的过程,可这就不能达到我们后台云心的效果了,我们可以把数据重定向到文件(上文提到了,你忘了没?),避免在屏幕输出。

1
2
3
4
5
richie@ubuntu:~/Desktop$ tar -zcvf linuxSJ2.tar.gz linux\ shangji > /tmp/tarlog.txt 2>&1 &
[3] 39300
[2] Exit 1 tar -zcvf linuxSJ2.tar.gz linux\ shangji > tmp/tarlog.txt 2>&1
richie@ubuntu:~/Desktop$ jobs
[3]+ Done tar -zcvf linuxSJ2.tar.gz linux\ shangji > /tmp/tarlog.txt 2>&1

2.2 “暂停”作业:[ctrl]+z

比方说你正在进行vim编辑,这是你又因为一些原因需要切回到bash环境,你可以暂时离开vim

1
2
3
4
richie@ubuntu:~$ vim .bashrc 

[1]+ Stopped vim .bashrc
richie@ubuntu:~$ #回到bash环境

2.3 观察当前作业状态:jobs

1
2
richie@ubuntu:~$ jobs
[1]+ Stopped

参数:[-lrs],什么意思自己去试一试吧。’+‘意味着默认。

2.4 后台作业拿到前台

在bash中的任务完成后,我们又要切换到vim中了,我们该怎么做呢?

1
2
3
fg #默认后台作业,即'+'所对应的作业。
fg %n #取出作业号为n 的作业
fg n # n为jobs命令列出的第一列序号

2.5 前台放到后台

1
bg %n

有童鞋会有疑问,前台云心的作业怎么拿到后台?前台作业不是占着终端的嘛?没错,你可以先ctrl+z暂停✔️。

2.6 杀死后台作业

kill命令可以杀死后台作业。使用方式和杀死进车类似

1
kill [-signal] %jobnum

参考网址:https://blog.csdn.net/ancient_wind/article/details/9858907
https://blog.csdn.net/cjfeii/article/details/10084343

Comments

⬆︎TOP