Linux 之 进程管理 -- 工作管理 (job control)

工作管理(job control) 是用在bash环境下的
也就是说,当我们登入系统取得bash shell之后,在单一终端机接口下同时进行多个工作的行为管理。
举例:我们在登入bash后,想要一边复制文件、一边进行资料搜寻、一边进行编译、还可以一边进行vim程序撰写。当然我们可以重复登入那六个文字接口的终端机环境中,但是我们其实是能在一个bash内达成的!这就是job control了
防止意外:
(/etc/security/limits.conf里可以设定使用者同时可以登入的联机数,如果我们被设定仅能以一个联机来工作,就不得不使用job control的模式。)

1. job control的注意事项

注意: 进行工作管理的行为中,其实每个工作都是目前bash的子进程,亦即彼此之间是有相关性的。我们无法以job control的方式由tty1的环境去管理tty2的bash(这个概念先建立起来)。

要进行bash的job control必须要注意到的限制是

  • 这些工作所触发的进程必须来自于你shell的子进程(只管理自己的bash)
  • 前景: 你可以控制与下达指令的这个环境称为前景的工作(foreground)
  • 背景:可以自行运作的工作,你无法使用contrl+c终止他,可使用bg/fg呼叫该工作
  • 背景中“执行”的进程不能等待 terminal/shell 的输入(input)

2. job control的管理

知识背景
bash 只能够管理自己的工作而不能管理其他bash的工作,所以即使你是root也不能够将别人的bash底下的job给他拿过来执行。此外,又分前景与背景,然后背景里面的工作状态又可以分为 暂停 stop 与 运作中 running.

2.1 直接将指令丢到背景中 执行的 &

假如我们要将 /etc/整个目录备份成为 /tmp/etc.tar.gz,便可以直接在命令行中输入: tar -zpcf /tmp/etc.tar.gz /etc &(工作模式:tar -zpcf 压缩文件目录及名称 待压缩目录的路径及名称)

tar -zpcf /tmp/etc.tar.gz /etc &

其中 [1]为工作号码(job number)与bash的控制有关
14432是该指令所触发的PID
然后我们可以忽略它得继续操作bash
任务完成后的提示:
背景任务完成后的提示

图片表示 job [1]已经完成,而接在其后的一串指令列即 工作指令。

插播zip的使用(和tar类似)

  • 压缩用zip zip -r /tmp/etc.zip /etc (zip -r 压缩文件路径 待压缩目录)
    翻译成人话:将/etc目录压缩成 etc.zip,放置在/tmp目录下(-r 表示递归压缩子目录下所有文件)
  • 解压缩用unzip unzip -d /tmp etc.zip zip -d 解压缩到的路径 压缩文件名称
    翻译成人话:将etc.zip解压缩到/tmp目录下(-d 表示解压缩到的目录,默认当前路径下)

不过,需要注意的是

在背景当中执行的指令,如果有 stdout 及 stderr 时,他的数据依旧是输出到屏幕上面,而由于是背景工作,通过[ctrl]+c也无法停止程序。因此在进行此类工作时,最佳的状况就是利用数据流重导向,将输出数据传送到某个文件中。

数据流重导向

例如👆,如此一来,输出信息都传送到 /tmp/log.txt了。

2.2 将“目前”的工作丢到背景中“暂停”:[ctrl]-z

在vim的一般模式下,如果我们需要到bash环境下进行搜寻,此时不需要结束vim,直接 [ctrl] -z即可将他丢到背景中等待。
参考如下鸟哥的解释:

ctrl 和 z

不同于 前面提到的& 将程序丢到背景里,在预设的情况下,使用[ctrl-z]丢到背景当中的工作都是“暂停”的状态。

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

如果我们想知道有什么工作在背景中,就用jobs这个指令。
一般来说,我们直接在命令行中输入jobs就可以了,不过它还有一些参数,可以根据需求添加
工作模式:jobs [-lrs]
选项与参数:

  • -l :除了列出 job number 与指令串之外,同时列出PID的号码
  • -r :仅列出正在背景 run 的工作
  • -s :仅列出正在背景当中暂停(stop) 的工作
    jobs -l

    解释一下 job number 后面的 “+” “-”符号:
    +代表最近被放到背景的工作号码
    - 代表最近最后第二个被放到背景中的工作号码
    超过最后第三个以后的工作,就不会有+/-符号存在了
    这里的意义在于:就像👆图中的情况,如果我们直接输入fg时(fg是 “将背景工作拿到前景来处理” 的命令) ,那个伴随"+"的job[2]会被预设拿到前景中来处理

2.4 将背景工作拿到前景来处理 : fg(foreground)

  • 工作模式:
    fg %jobnumber
  • 选项与参数
    %jobnumber jobnumber为工作号码(数字) ## 注意,那个%是可有可无的

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

鸟哥在下面这个图中讲得很详细,工作模式和fg相同


bg让在背景下暂停的工作运作

2.6 管理背景当中的工作 kill

如果我们想要将工作移除,可以使用kill这个命令,当然它还有一些参数来作为辅助
工作模式:kill -signal %jobnumber
常见参数介绍
-l注意这里是L的小写,列出目前kill能够使用的参数有哪些
-1 重新读取一次参数的配置文件
-2 代表与由键盘输入 [ctrl] -c 同样的动作
-9 立刻强制删除一个工作
-15 以正常的进程方式终止一项工作。与-9不一样
想要了解signal的更多信息:man 7 signal去查询相关资料
这里解释一下kill -9kill -15 ,当然推荐大家都使用 kill -15,如果是迫不得已再使用kill -9。因为有的进程在运行过程中会产生一些文本,kill -15在kill进程时会将与进程相关的一切(包括中间生成的文本)一并删除。而kill -9会强制得将工作移除掉,而一些中间产物会继续存在文件系统里。

注意:kill 后面接的数字默认是PID,如果想要管理bash的工作控制,必须使用kill -signal %jobnumber的形式(不同于fg)

3. 脱机管理问题

很多小伙伴刚接触linux时,会把 &放到背景中运行的模式当作放到系统的背景去,这么理解就错了。
我们之前在“工作管理”中提到的“背景”指的是bash的背景(也就是说,指的是在终端机模式下可以避免ctrl -c中断的一个情景),而不是放到系统的背景去。如果不好理解,举个例子:如果你是以远程联机的方式连接到你的Linux主机(terminal 或 putty),并且以&的方式放到背景去,如果工作尚未结束你就exit脱机了,你放在bash背景中的未完成的工作就会被中断的。

那该怎么办呢?如果我的工作需要进行一大段时间(>24h),总不能一直守着自己的终端机,开着远程联机软件肉眼看着吧。对于这种情况,我们可以将工作放置在系统背景,这样就与终端机无关了。

因此,这种情况我们可以使用atnohup

3.1 nohop

nohup可以让你在脱机或注销系统后,还能够让工作继续进行,它的工作模式
nonhup [指令与参数] 命令 & 这样就可以在系统背景中运行

3.2 at

at这个指令通常是用在仅执行一次的工作排程里(将某些工作排进进程表中,在指定的时间执行)。当然,由于涉及系统安全问题,不是每个人都可以使用at的。查看/etc/at.allow(可以使用的名单) 和 /etc/at.deny(不可以使用的名单)两个文件,如果两个文件都不存在,那么只有root可以使用at这个命令。

  • at 的运作方式
    使用at这个指令来产生所要运作的工作,实质上,是将待运行的工作以文本的方式写入/var/sool/at/目录内。通过这种方式,便能通过atd这个服务,进行工作的取用与执行。
at 的使用方法-1

at 的使用方法-2
  • at 的工作管理
    atq查询目前主机上有多少at工作排程
    atrm (jobnumber) 删除错误的命令
    拿鸟哥的图来理解
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 一个程序被加载到内存当中运行,那么在内存内的那个数据就被称为进程(process)。进程是操作系统上非常重要的概念...
    Zhang21阅读 1,919评论 0 12
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,362评论 0 5
  • 进程相关概念系统进程管理工具任务计划 一、进程相关概念 定义:进程(Process)是运行中的程序的一个副本,是被...
    哈喽别样阅读 554评论 0 0
  • 观其大纲 第1部分Linux的基础知识第1章Linux概述第2章Linux系统的安装KickStart开始自动安装...
    周少言阅读 1,457评论 1 10
  • 周六的早上,林潇潇难得睡了个大大的懒觉。这段时间实在是太累了,学业上不敢放松,抽空还要赶去参加各个招聘会、准备简历...
    向日葵之海阅读 288评论 0 0