温故:
什么是进程,什么是程序。我们知道,执行一个程序或者命令,就会触发事件并且形成一个PID,但是什么才是程序呢?其实很简单,因为系统只认识二进制文件,所以被执行的二进制文件就是程序。程序和进程的关系可以简单的理解为放置在物理磁盘中的程序被用户的执行触发后会加载到内存中成为一个个体,这个个体就是进程。这里举一个简单的例子:当前系统中有两个用户分别是root和gao,这两者登录系统时都会执行bin/bash,系统就会分别给与一个PID(假设此时root用户的PID是1234,gao用户的PID是2234),这个PID就是根据用户的UID/GID的权限而来,接下来当这个进程执行其他的任务时,比如创建一个文件夹,那么由这个进程衍生出的其他进程一般情况下也会沿用这个进程的相关权限。上面的一段话提到了“进程衍生出的其他进程”,其实这个说的就是子进程,还是用刚才的例子,当我们使用root用户执行bash登录系统的时候,系统会给这个进程分配一个PID,然后进入系统之后,我们又使用touch命令创建了一个文件夹,创建文件夹的这个动作同样也会被分配一个进程号,前者就称为父进程,后者就是子进程,因此我要说的是:进程之间是有相关性的。
如果对这部分内容感兴趣,请看我的《Linux之什么是进程》
知新:
今天接着上次的《Linux之什么是进程》继续讲,这次要讲的是任务管理,类似于windows系统中的任务管理器,为什莫要有任务管理呢,因此在大部分时候我们都是需要在单一终端下同时执行多个任务的,这个时候就需要对这些任务进行操作管理,可能你会问:上一篇文章中明明提到了Linux系统默认提供了6个命令行登录界面,我可以分别用不同的登录界面来处理不同的问题啊,其实你这么想没有问题,说明你真的很会思考,但是Linux还有这样一个规定,在/etc/security/limits.conf文件中是可以设置用户同时登录的连接数的,假如此时你的用户被设置为仅能以一个连接来登录呢,你怎么办???
一、任务管理初印象
在这里我将使用者当前正在操作的命令符界面称之为前台,将其他已经暂停或者也需要运行的任务放到后台,**特别强调:放入后台 的任务,它必须不能够与用户进行交互**,我解释一下这句话的含义,举例来说,一个vim任务绝对不可能在后台里面执行,知道为什莫吗?因为你都没有输入信息它凭什么可以运行。还有一点是要注意的,**放入后台中的进程是不可以直接用【ctrl+c】来终止的。**这里还有几条bash的任务管理所要注意的限制,很好理解大家看一看:
1)这些任务所触发的进程必须是来自于你shell的子进程(各管各的)
2)前台:可以控制与执行命令的这个环境称之为前台的任务
3)后台:可以自动执行的任务,并且无法使用【CTRL+c】来终止,可以使用bg、fg来调用后台任务
4)后台中执行的进程不能等待terminal或shell的输入
二、任务管理的常用命令
刚刚上面也已经提到了后台任务的状态可以是运行的,也可以是暂停的,那么是如何实现这些状态的转变呢?主要是通过以下几个命令的使用:
1)【&】:直接将命令丢到后台中执行
关于这个命令上一篇文章中我已经讲过,并且做了示范,如果大家觉得需要了解一下,可以点击后面的链接去学习 《Linux之什么是进程》
我们通过图片对这个命令的内容进行分析:注意看最上面的那两行,输入命令之后,可以看到bash给予了这个命令一个【任务号码(job number)】,就是第二行开头的【4】,后面的那个6355则是该命触发的PID ,然后你可以看到我可以继续操作bash,还查看了文件呢,说明复制的任务确实已经放到了后台了。
2)【ctrl+z】:将目前的任务丢到后台中【暂停】
这里可以看到我将vi命令使用【CTRL+z】暂停8后台了,已经出现了暂停任务标识,下面我可以继续执行FIND命令,说明我已经取得了前台的控制权。此时可以使用命令【jobs】 查看当前的后台任务状态
3)【fg】:将后台的任务放到前台处理
4)【bg】:让后台的任务在后台变成运行中
5)【kill】:杀进程
三、脱机管理
假设,有这样一个任务,要执行很长时间不能中断,而且还不能被放置到后台,就像你使用远程连接处理问题时,在任务还未结束的时候你脱机了,这个时候任务就会被中断,所以这时可以有两种方法,一是使用之前讲的【at】,二是使用【nohup】命令。这个nohup可以在脱机或者注销系统后,仍旧让任务继续执行
在这里创建了一个sleep500.sh的脚本,然后给所有用户sleep500.sh的可执行权限,接将该脚本放到后台执行,此时如果你再次登录使用【pstree】查看进程,会发现这个脚本还在执行中,这就是脱机管理。
今天的内容就暂且讲到这里,如果对这部分内容感兴趣,请看《Linux之进程管理——查看进程》再见