初窥Linux之构建你的Linux“任务管理器”


初窥Linux之构建你的Linux“任务管理器”

在Windows下,大家肯定有用过任务管理器,特别是我们想看看我们的CPU的使用率、内存还剩下多少,又或者某个程序出现了异常还关闭不了时,大家肯定会使用任务管理器来强制结束这个程序。那么在Linux下有没有这样的工具呢?答案是肯定的,作为一个强大的操作系统,Linux怎么可能没有“任务管理器”呢?我们可以通过一系列的工具和命令来出色地实现我们在Windows中任务管理中所做的一切工作,构建一个Linux的“任务管理器”。虽然它却并不像Windows中的任务管理器那样直观,然而功能却非常强大。下面我就用Windows中的任务管理作为对比,介绍这些工具的使用。

一、查看应用程序
在Windows中的任务管理程序中,我们可以很轻松直观地看到我们打开的应用程序,而在Linux中要如何查看我们(即当前用户)所打开的应用程序呢?首先介绍一个最简单的命令——ps,它能将某个时间点的进程运行情况选取下来。我们可以这样做:

首先,我打开了一个浏览器程序firefox(中间有一些打开错误的信息,读者可以暂时忽略它),然后利用命令ps -l查看自己的bash打开的程序,从上面可以看到,root这个用户打开的程序有bash、firefox和ps。为什么会有ps这个程序?因为你刚输入ps命令,让ps这个程序启动来进行进程的查看,所以当然它也是root打开的一个进程。

下面我就给大家讲讲输出中各列的意思吧,因为后面的很多命令都会出现相似的信息。
F:进程的标志,用以说明说明进程的权限,通常为4或1,4表示此进程的权限为root,1表示此进程仅可进行复制(fork)            无法实际执行(exec)。

S:进程的状态,主要的状态有R(Running),S(Sleep),D(不可被唤醒的睡眠状态),T(停止状态),Z(“僵尸”状态)。

UID:进程的拥有者(用户)的ID号,root的ID为0;

PID:此进程的ID号

PPID:此进程的父进程的ID号,可以看到ps和firefox的父进程都是bash,当然了,因为都是由bash这个进程产生的。

C:CPU的使用率,单位为百分比;

PRI:即Priority,代表此进程被CPU所执行的优先级,数值越小代表进程越快被CPU执行。

NI:Nice,也代表进程被CPU所执行的优先级,不同的是PRI是系统指定的,而NI则可由用户指定,且PRI(new) = PRI(old)+ NI, 简单点来说,就是PRI不能由用户决定,但是用户可通过NI对进程的执行优先级进行调度,对于root其对NI的设置范围为-20~19,对于普通用户为0~19(避免一般用户抢占系统资源)

ADDR/SZ/WCHAN:都与内存有关,ADDR指出进程在内存中的位置,running为“-”,SZ表示用掉多少内存,WCHAN表示进程是否在运行中,“-”同样表示在运行中。

TTY:终端机位置;TIME:使用掉的CPU时间,注意不是系统时间;CMD:产生此程序的命令。

看到没?这可是非常详细的,比你在Windows的任务管理器看到的信息详细多了。

二、查看进程
在Windows的任务管理器中,我们也可以很轻松的查看到系统到底进行着哪些进程,这些进程对应着哪些用户,对CPU和内存的使用等情况。在Linux中有什么好的工具可以实现这个功能呢?这里跟大家再分享一个工具吧——top。相对于ps是静态的,只能选取一个时间点的进程状态,则top就是动态的持续检测进程的运行情况了。

1、使用ps静态查看
下面还是先从ps这个工具说起吧,其实ps也能实现这个功能,其方法如下:

注意:是ps aux 没有“-”。

由于Linux中的所有的进程真的是非常的多,所以在这里就不一一显示出来了,每一列的参数的意义跟第一点中的相同,而比第一点中多出的两列:VSZ表示该进程使用掉的虚拟内存量(KB),RSS表示该进程占用的固定的内存量(KB)。

如果你只看看某个进程的情况那该如何是好呢?非常简单,例如我想看看firefox这个进程的情况,操作如下:

通过命令管道,把ps输出的内容进行筛选就可以了,对比第一点的输出可知,PID为2576的确是firefox的进程ID,真是非常方便和简单。

2、使用top动态查看
好了,可能你会说Windows的任务管理器中进程的查看可是动态检测的,不要心急,下面就来介绍一个更加强大好用的工具——top。下面我就介绍一下最简单的top的用法,top还有很多的功能,大家可以man一下,这里不一一详述。操作如下:

top -d 数字,表示每几秒更新一次,上面的命令表示,每5秒更新检测一次。

你可以以黑色的粗线为界,把输出结果分成两个部分来看,上一部分是系统信息、系统资源的使用情况和进程数等,下一部分跟之前说的一样,是系统中的进程的情况,其意义与前面所述相同。

这里就来说说第一部分,黑线以上的内容的意义吧。

第一行:目前时间为10:58:59,开机到目前为止所经过的时间为1:06,已登陆系统用户数为2,系统在1、5、15分钟的平均负载,代表的是1、5、15分钟系统平均要负责运行几个进程的意思,越小代表系统越闲置,若高于1,就表示系统比较繁忙了。

第二行:显示进程的总数和个别进程的状态,总共有135个进程,1个正在运行,134个正在睡眠,0个处于停止状态,0个全局进程。最后一个是表示“僵尸”进程的个数,若不是0,最好检查一下,看哪个进程成僵尸了。

第三行:CPU的整体负载

第四行和第五行:表示物理内存和虚拟内存的使用情况。

注:很多时候我们会看到系统没有运行什么程序,而内存却几乎用光,请不要担心,内存用光是正常的,因为Linux系统为了加速系统性能,所以会把最近使用到的文件数据缓存下来,这样将来系统要使用该文件时,就直接由内存中取出而不需要从硬盘中调入内存。反而要注意的是swap(虚拟内存)的使用量,一般来说swap最好不要被使用。

3、查看进程树或父进程
从之前的例子中我们可以看到,很多进程都有一个父进程,实际上Linux上所有的进程都是init的子进程,那么我们如何查看一个进程的父进程呢?这点在Windows中的任务管理器中可是做不到的。

1)使用pstree查看,操作如下:

注:A:用ASCII码来显示连接,p列出PID,从上面也可以看出,所有的进程都是init的子进程。

2)使用ps查看
没错,你还能使用ps这个工具来进行查看,怎么样?很强大吧,操作如下:

中间的一些部分省略......


可以看到它列出了之前第一点我们所说的进程的关系,即bash是firefox和ps的父进程。

三、结束任务、结束进程
在Windows上,很多时候我们使用任务管理器来结束某个出现了异常而且不能正常关闭程序或者说结束掉某个进程,这可能也是大多数Windows用户使用任务管理器的目的。而在Linux下在怎么办呢?我们也有很好用的工具,这里分享两个常用工具kill和killall。
1)使用kill
其实使用kill和killall都要传递一个信号给进程,告诉来告诉这个结束你想要怎么结束。常用的信息有3个,它们都有一个代号和名称,使用上代号和名称是等同的,如下:
1(SIGHUP),启动被终止的进程,相当于重新启动。
9(SIGKILL),强制中断一个进程的执行。
15(SIGTERM),以正常的结束进程来终止该进程,注意,如果该进程已发生问题,就是无法使用正常的方法终止时,输入这个信号也是没有用的。

下面我们就来看看kill的使用吧,操作如下:

首先用ps -l来找出所要删除的进程的ID号,然后使用kill删除进程,从后面的查看中可以看到firefox已经被终于。而kill的用法为kill -signal PID。由于它后面要加上PID所以经常配合ps、pstree等命令一起使用。

2)使用killall
我知道你想说,kill很麻烦,我想要终止一个进程还要找到它的PID,真的是不太爽啊,有没有办法让我可以根据“执行命令的名称”来给予信号呢?答案是肯定的,它就是killall。操作如下:

这里重新运行firefox这个进程,然后使killall来终于这个进程,从最后的输出结果来看,firefox已经被我们正常终于。怎么样?很方便吧!补充一下,killall的用法为:killall -signal 命令名称。

注:如果大家想在像windows中那样强制结束进程的话,就把signal改为9或者9所对应的名称SIGKILL即可,这适用于kill和killall。

四、查看网络情况
在Windows的任务管理器中,也有一个叫“联网”的信息页,虽然大家可以在Windows下不怎么会关注它(至少我是这样),但是网络的使用情况在Linux下是非常重要的,因为Linux通常是作为服务器系统来使用的。然而在Linux下有没有这样的工具呢?当然有,它就是netstat,操作如下图所示:


由于本人对网络部分还不是很了解,在这里不作过多的解释,大家要用到时可以man netstat一下。

五、其他工具
尽管在前面的工具中(如top)也有一些是可以查看系统的各种资源的情况,但是这些工具可能产生较多的你不想要关心的信息,例如,我只想看看CPU和内存的使用情况,我用top的话,就会产生很多我并不关心的进程的信息。所以下面来介绍一些功能专一点的工具。

1、free:查看内存的使用情况
free的使用非常简单,操作如下:


命令中m表示输出数据的单位为MB,当然你也可以使用b、k、g等。还可以加一个参数t来显示物理内存与swap的总量。

2、uptime:查看系统启动的时间和工作负载,使用非常简单直接输入uptime即可,不详述了。

3、vmstat:检测系统资源变化
vmstat可以实现CPU/内存/磁盘输入输出状态等。下面以举几个例子说明一下这个工具的使用吧。
1)统计目前主机CPU的状态,每秒1次,共统计2次,操作如下:

下面我来解释一下一些列的意义吧。
r:等待运行中的进程数量,b:不可被唤醒的进程数量,这两个选项数学越大,表示系统越繁忙。
si:由磁盘中将程序取出的量,so:由于内存不足而将没用到的程序写入到磁盘的swap的容量。
bi:由磁盘写入的块数量,bo:写入到磁盘去的块数量。这部分数值高,表示系统I/O繁忙。
in:每秒被中断的进程次数,cs:每秒钟进行的事件切换次数;
us:非内核层CPU使用状态;sy内核层使用CPU的状态,id:闲置的状态;wa:等待I/O所消耗的CPU状态;st:被虚拟机所盗用的CPU使用状态。

2)检测系统上所有的磁盘的读写状态
操作非常简单,输入vmstat -d即可,不一一详述。

六、总结
看到这里你已经看到这个Linux“任务管理器”的强大了吧,至少个人感觉比Windows中的任务管理器强大多了。它主要由ps、pstree、top、kill、killall、free、netstat、uptime、vmstat等工具组成。

相关内容

    暂无相关文章