Linux作业控制

转载:https://blog.csdn.net/bit_clearoff/article/details/57113825

前面我们学习了进程,线程,信号等相关内容,今天我们要引入一个新的概念——作业,那么什么是作业呢?当我们在Linux的shell中运行程序时,这个程序就可以看成是一个作业了,可以这么说shell控制的是作业,而不是进程,而且shell还可以分前后台对作业进行控制,所以,今天我们就来谈一谈Linux下面的作业控制


什么是进程组

要弄明白作业这个概念,首先我们必须要了解进程组,那么什么是进程组呢? 
熟悉Linux的应该都知道,进程不光有进程pid,它还属于一个专门的进程组,其中进程组id在Linux下被称为PGID,如果进程的id等于该进程的进程组的组id,那么这个进程被称为组长进程。但是组长进程和进程的生命周期是没有关系的,另外,当一个进程创建一个进程组时,那么创建进程组的这个进程就是组长进程;最后,进程的生命周期之和进程组中的最后一个进程有关。 
还有一点就是,在shell下,我们通过shell控制的是作业或者进程组,而不是进程。 
(图片:进程组) 
如上图,当我们在shell下运行一个程序时,这个程序成为了进程,由于当前shell下运行的进程只有一个,所以这个进程就自己创建了进程组并成为组长。 
当我们在shell下运行多个进程时,一般第一个进程会被作为组长进程。


什么是作业

谈完了进程组,现在我们来谈一谈什么是作业?前面提到,shell分前后台控制的不是进程,而是作业或者进程组,一个前台只能运行一个进程组或一个作业,而一个后台可以运行多个进程组和多个作业。 
(作业1)

由上图我们可以看出,当父进程创建了一个子进程,这个子进程虽然和父进程在一个进程组当中,但是子进程却不属于这个作业。


什么是会话

前面我们提到了进程组合作业,现在我们在来看一个跟他们有关联的东西——会话。 
什么是会话?会话是一个或多个进程组的集合。会话,进程组,(或作业)和进程他们之间具有下面这幅图的关系。 
这里写图片描述 
下面我们在Linux下用ps -ajx 指令来看看他们的各种ID. 
这里写图片描述 
可见在同一个shell下运行的进程组组成了一个会话,shell相当于创建了这个会话,所以在会话中shell又被称为会话的首进程。


作业控制

将作业放在在前台运行

让一个作业在前台运行我们主要有下面几种方法: 
1. 在运行程序时不加 &符号,这样程序所对应的作业直接在前台下运行。 
2. 如果我们想要把后台的作业提到前台来运行,需要使用* fg %+作业号*的指令。 
需要值得注意的是,当我们在前台下运行一个作业时,shell会被拉倒后台,因为前台只能运行一个作业或一个进程组

将作业放在后台运行

让一个作业在后台下运行我们也有下面几种方法: 
1. 在运行程序时加上&符号。 
2. 使用 bg %+作业号的指令,让一个在后台停止的作业放到后台运行(注意停止两字非常关键)。

前台和后台的区别

前面我们提到了前后台控制作业,现在我们有必要说明一下前后台的区别。 
1. 首先,前台下面只能运行一个进程组和作业,而后台下面可以运行多个进程组和作业。 
2. 前台下面的作业可以从标准输入中收到字符,而后台的作业则不能从标准输入中读取字符,当后台作业如果尝试从标准输入中读取字符时,那么后台作业会被阻塞。 
要理解这一点,首先我们要明白一下Linux中对输入和输出队列的组织方式。他们之间的关系如下图: 
(输入和输出队列)

下面我们再来看一个栗子: 
这里写图片描述
上图中,我们运行了 cat > sleep.tmp & 指令,它让cat在后台下读取用户在shell下面(标准输入)输入的字符,然后写进sleep.tmp文件中,当我们在后台运行这条指令时,我们发现这个作业的状态为Stopped.而当我们把作业提到前台来运行时,此时就可以输入字符到文件中了。我们从上图中可以发现操作系统为了让后台不能读取标准输入,还想作业发送了相关的信号,而当作业恢复到前台来时,操作系统也发送了信号,是作业能够在前台成功运行。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bit_clearoff/article/details/57113825

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值