Linux下的进程调度与作业管理

Linux下的进程调度与作业管理

一、概述

1.1 进程的相关概念:

通过前面的几个章节,我们几乎已经学习了很多的linux的基础,这个章节我们讲一下linux下的进程管理,就像windows 下的进程一样,我们知道windows 下有一个任务管理器,专门用来管理进程,我们首先看一下windows 的任务管理器:

blob.png

blob.png

从这2个图我们可以看出,windows 下的进程管理是不需要我们用户进行过多的调度的,我们有时候也会遇到比如说某一个进程占用CPU过多,我们的主机或者说操作系统就会变得非常卡,有时会出现”假死”的现象,在windows XP之前的版本,甚至包括XP都会出现真死的情况,就是鼠标卡住一动不动,也就是我们说的死机,造成这种原因一般就是CPU运行的负载过大,或者说某一个进程占用CPU时间太长,占用的CPU太多,造成的进程堵塞的情况,想必有维修经验的同学都会遇到这样的情况,由于windows大多是单任务 单用户的系统,所以出现死机的情况我们只能“重启”解决。但是如果是生产中的服务器,我们也reboot解决吗。你要知道生产中的服务器是不允许没有任何通知的情况下进行操作系统重启操作的,我们又知道,linux内核是支持多任务、多用户同时访问的,所以我们可以在这个用户死机的时候,用ALT+F1~F7 切换到其他的终端,在其他的终端上使用root权限把占用过的CPU的进程kill掉,这样就能解决死机的问题了,这就是我们需要了解和掌握的linux 内存调度。

所谓进程,我们可以简单理解,把进程想象成动态的程序,由于计算机只能识别二进制文件,所以我们在硬盘上存储了许许多多的二进制可执行文件(程序),当我们在命令行模式下输入某个命令时,前面讲过其实我们是触发了一个事件,也就是启动了一个进程而已,只不过内核需要首先判断一下进程的发起者,其实我们登录的shell本身就是一个进程,我们一般要运行的这个图标:

blob.png

它本身就是一个程序,在我们登录系统的时候也是触发了一个事件,当我们输入账号和密码的时候,其实就是给了这个进程一个权限,也就是UID 和GID 权限,因为/bin/bash本身也是一个程序而已,所以我们日常登录的shell本身就是一个进程,我们在这个shell上运行命令,当然就是从这个进程中触发一个事件,衍生出一个新的进程来加载到内存中,等待CPU执行而已,所以说这个衍生出来的进程就叫做子进程,创造这个子进程的进程就是父进程,子进程会继承父进程的相关运行权限,包括父进程的环境变量就是这个意思。所以说,每一个进程都有一个PID ,而衍生出来的子进程也会有一个PID,也会有一个PPID 这个PPID就是他的父进程的PID号。 
说了这么多,大概大家也应该会明白相关的原理,请看下面这2个图:

blob.png

二、工作管理

2.1 什么是工作管理

工作管理(job control) 是用在bash环境下的,也就是说,当我们登录系统取得bash shell之后,在单一终端下同时运行多个工作的行为管理,举例来说,我们在登录bash后,想要一边复制文件一边进行数据查找,一边进行编译,还可以一边进行VIM程序编写,当然我们可以重复登陆那6个命令行界面的终端环境中,不过,能不能在一个bash 中实现,当然可以,就要用到job control 。

2.2 job control 的管理

1. 直接将命令丢到后台中执行的 & 
把某些工作直接丢到后台环境中,让我们可以继续操作前台的工作,例如:

blob.png 
2. 将目前的工作丢到后台中“暂停” : ctrl + z 
比如我们正在编辑/etc/passwd 这个文件,我们发现想要查询一个当前shell的一个其他文件的信息,那么可以使用ctrl+z 这个命令暂时将我们当前的任务挂起

blob.png 
+表示最近一个被丢进后台的工作

3. 查看目前的后台的工作状态: jobs 
jobs [-lrs] 
选项: 
-l 除了列出job number 与命令字串之外 同时列出PID的号码

blob.png 
-r 仅列出在后台run运行的工作 
-s 仅列出正在后台当中暂停(stop)的工作

4. 将后台工作拿到前台来处理 fg %number 
例如:我们可以把刚才的vim 编辑的文件 返回到前台接着进行编辑

[root@localhost test]# fg %3
vim passwd

5. 让工作在后台下的状态变成运行中 bg 
例如:执行find / ! -perm /111 > /tmp/text.text 后立即丢到后台去暂停

blob.png 
然后我们运行bg %1 在运行jobs 来查看一下状态

blob.png 
我们会发现现在1 这个作业的状态是在后台运行的running 态

6. 管理后台当中的工作:kill 
kill -signal %jobnumber 
选项: 
-l 这个是L的小写,列出目前kill 能够使用的信号(singnal) 有哪些 
signal 代表给予后面接的那个工作什么样的指示

blob.png 
这里详细说明以下几个数字的涵义: 
-1 重新读取一次参数的配置文件(类似于reload) 
-2 代表与有键盘输入 ctrl -c 同样的操作 
-9 立刻强制删除一个工作 
-15 以正常的程序方式终止一项工作,与-9 不一样的

例如,我们把这个工作强制终止:

blob.png

 
如果我们想让工作3这个任务正常退出,则使用-15 例如:

blob.png

2.3 进程管理

2.3.1 进程的查看

1. ps命令 
选项: 
-A 所有进程均显示出来,与-e 具有同样的作用 
-a 不与终端 terminal 有关的所有进程 
-u 有效用户(effective user)相关的进程 
X 通常与a 这个参数一起使用,可列出比较完整的信息 
a: 所有与终端相关的进程 
x: 所有与终端无关的进程 
带[] 的是内核线程 
u: 以用户为中心来组织状态信息显示 
(1)仅查看自己的bash 相关进程ps -l

blob.png 
下面分别讲解一下每一列的意义: 
F : 代表这个进程的标志 (process flags) 说明这个进程的权限 常见的号码有

**4**  表示此进程的权限为 root
**1**  表示此子进程金科进行复制(fork) 而无法实际执行(exec)

S 代表这个进程的状态(STAT) 主要的状态有:

**R**  (Running)该进程正在运行中
**S**  (Sleep)该进程目前正在睡眠状态idle 但可以被唤醒
**D**   不可被唤醒的睡眠状态 通常这个进程可能在等待I/O 的情况
**T**   停止状态(STOP) 可能是在工作控制(后台暂停)或出错(traced)状态
**Z** (Zombie)“僵尸”状态,进程已经终止,但却无法被删除至内存外

UID/PID/PPID 代表此进程被改UID 所拥有 / 进程的PID号码 / 此进程的PPID号码

C 代表CPU使用率 单位为百分比

PRI/NI Priority/Nice 缩写,代表此进程被CPU所执行的优先级,数值越小,代表该进程越快被CPU执行

ADDR/SZ/WCHAN 都与内存有关, ADDR 是 kernel function 指出该进程在内存的哪个部分,如果似乎个running 的进程,一般就会显示为“-”,SZ 代表此进程用掉多少内存 
WCHAN 表示目前进程是否运行中,“-” 表示正在运行中

TTY 登录者的终端机的位置,若为远程登陆则使用动态终端接口(pts/n)

TIME 使用掉的CPU时间,注意,是此进程花费的CPU运行的时间,不是系统时间

CMD 就是command 的缩写,造成此程序的触发进程的命令为何

2. 查看系统所有的进程 ps aux

blob.png

blob.png

解释一下各个字段的涵义

USER 改进程属于哪个用户账号 
PID 该进程的进程标识符 
%CPU 该进程使用掉的CPU资源百分比 
%MEM 该进程所占用的物理内存百分比 
VSZ 该进程使用掉的虚拟内存量(KB) 
RSS 该进程占用的固定的物理内存两(KB) 
TTY 该进程是在那个终端机上面运行,若与终端机关无关则显示  另外 tty1~tty6是本机上面登录者程序,若为pts/0等 则表示为由网络连接进主机的进程 
STAT 该进程目前的状态,

 R running 运行态
S Interuptable sleeping 可中断睡眠
D uninteruptable sleeping 不可中断睡眠
T Stopped 停止态
Z zombie 僵尸态
+ 前台进程
l 多线程进程
N 低优先级进程
< 高优先级进程
s session leader 会话主导者

3. 其他ps 命令

(1)ps -lA 显示出所有的进程

blob.png

(2)ps axjf 显示出进程之间的关系

blob.png

(3)ps axo 自定义显示列表 如只显示 user,pid,command,psr,pri,ni 等信息

blob.png

4. pgrep 命令 
pgrep [OPTIONS] “PATTERN” 
-U UID 仅显示以指定用户身份运行的进程

blob.png 
-G GID 仅显示以指定用户组的身份运行的进程 
-I显示PID 和进程名

5. 显示指定命令所启动的进程ID pidof 
语法格式 pidof PROGRAM (给定的命令行程序)

blob.png

6.top 命令 动态查看进程的变化 
相对于ps是选取一个时间点的进程状态,top 则可以持续检测进程运行的状态 
top [-d数字] | top [-bnp] 
选项: 
-d 后面可以接秒数,就是整个进程界面更新的秒数,默认是5S 
-b 以批次方式执行top 还有更多的参数可以使用。 
通常会搭配重定向来讲批处理的结果输出成为文件 
-n 与 -b 搭配,意义是:需要进行几次top 的输出结果 
-p 指定某些个PID 来进行查看监测而已 
在top 执行过程中可以使用按键命令

? 显示在top 正当中可以输入按键命令
P  以CPU 的使用资源排序显示
M  以内存的使用资源排序显示
N  以PID 来排序
T  由该进程使用的CPU时间累计(TIME+)排序
k  给予某个PID 一个信号(signal)
r  给予某个PID重新定义一个nice值
q  离开top软件的按键

blob.png

上图就是运行top 命令后显示出的内容,现在分别讲述一下top 头几行信息的意义: 
第一行top

 目前的时间 17:39:31
开机到目前为止经过的时间 即 up 3:16
已经登录系统的用户人数 2 users 这个选项
后面的load average:0.00 0.01 0.05 分别是系统在1分钟 5分钟 15分钟平均要负责运行几个进程的意思,越小代表系统越闲置,若高于1就得注意系统压力是否过大了

第二行

 Tasks... 显示的是目前进程的总量与个别进程在什么状态(running,sleeping,stopped,zombie)比较注意的是最后的zombie 那个数值,如果不是0 要查询是哪个编程了僵尸态

第三行

CPUs... 显示的是CPU的整体负载,每隔选项可使用?查阅 需要特别注意的是 %wa 那个选项代表的是 I/Owait 同城系统变慢的原因就是这个值比较大

第四行与第五行

表示目前的物理内存与虚拟内存的使用情况,要注意的是swap 的使用量尽量少,如果swap被大量使用,表示系统的物理内存不足

第六行 就是top的首部

blob.png 
这里的列表的意义与PS 中的基本类似,这里就不加以详细说明了

7. htop命令的用法

htop 是 top 的升级版,系统里面并没有安装,需要我们手动去安装一下htop

blob.png上图是运行htop 的结果,htop 需要手动配置epel yum源才能安装运行后才能使用

显然,htop 工具的功能更强大 
htop命令: 
选项: 
-d #:指定延迟时间间隔; 
-u UserName:仅显示指定用户的进程; 
-s COLUME:以指定字段进行排序; 
子命令: 
l:显示选定的进程打开的文件列表; 
s:跟踪选定的进程的系统调用; 
t:以层级关系显示各进程状态; 
a:将选定的进程绑定至某指定的CPU核心;

8. vmstat 检测系统资源变化的命令

  • Report virtual memory statistics

        vmstat  [options]  [delay [count]]
       procs:
           r:等待运行的进程的个数;CPU上等待运行的任务的队列长度;
           b:处于不可中断睡眠态的进程个数;被阻塞的任务队列的长度;
           memory:
               swpd:交换内存使用总量;
               free:空闲的物理内存总量;
               buffer:用于buffer的内存总量;
               cache:用于cache的内存总量;
           swap
               si:数据进入swap中的数据速率(kb/s
               so:数据离开swap的速率(kb/s)
           io
               bi:从块设备读入数据到系统的速度(kb/s
               bo:保存数据至块设备的速率(kb/s
           system
               in:interrupts,中断速率;
               cs:context switch, 上下文 切换的速率;
           cpu
               us: user space
               sysystem
               id:idle
               wa:wait
               st: stolen

       选项:
           -s:显示内存统计数据;

blob.png

9. pmap命令: 
– report memory map of a process

        pmap [options] pid [...]
           -x:显示详细格式的信息;

       另一种查看方式:cat  /proc/PID/maps

10. glance工具

  • A cross-platform curses-based monitoring tool

        内建命令:

       常用选项:
           -b:以Byte为单位显示网上数据速率;
           -d:关闭磁盘I/O模块;
           -m:关闭mount模块;
           -n:关闭network模块;
           -t #:刷新时间间隔;
           -1:每个cpu的相关数据单独显示;
           -o {HTML|CSV}:输出格式;
           -f  /PATH/TO/SOMEDIR:设定输出文件的位置;

       C/S模式下运行glances命令:
           服务模式:
               glances  -s  -B  IPADDR

               IPADDR:本机的某地址,用于监听;

           客户端模式:
               glances  -c  IPADDR

               IPADDR:是远程服务器的地址;

    11. dstat 命令

blob.png 
dstat [-afv] [options..] [delay [count]]

        常用选项:
           -c, --cpu:显示cpu相关信息;
               -C #,#,...,total
           -d, --disk:显示磁盘的相关信息
               -D sda,sdb,...,tobal
           -g:显示page相关的速率数据;
           -m:Memory的相关统计数据
           -n:Interface的相关统计数据;
           -p:显示process的相关统计数据;
           -r:显示io请求的相关的统计数据;
           -s:显示swapped的相关统计数据;

           --tcp
           --udp
           --raw
           --socket

           --ipc

           --top-cpu:显示最占用CPU的进程;
           --top-io:最占用io的进程;
           --top-mem:最占用内存的进程;
           --top-lantency:延迟最大的进程;

原创文章,作者:luobo3692003,如若转载,请注明出处:http://www.178linux.com/49888

(0)
上一篇 2016-10-17 08:36
下一篇 2016-10-17 10:16

相关推荐

  • 程序包管理:rpm和yum

    rpm命令                              软件包管理 程序包管理 一、概述 (一)API:Application Program Interface  应用编程接口 ABI…

    Linux干货 2016-08-21
  • Linux学习笔记(第三篇)

    N21_Keen_第三周博客 1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 who | cut -d " " -f 1 | sort -u 2、取出最后登录到当前系统的用户的相关信息。 last…

    Linux干货 2016-08-15
  • Apache配置压缩优化时报错——undefined symbol: inflateEnd

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1345264    圣诞都过了,好久没来51发博文了。最近一直在忙考试和其他一些私人事务,感觉长期不发博文,有点不好。不是不发,实在是最近…

    Linux干货 2016-08-15
  • LAMP部署之NFS共享网络存储

    LAMP部署之NFS共享网络存储 架构图: 说明:     当一个网站的访问量上来之后,一台WebServer服务器无法应付那么高的并发,需要横向扩展Web服务器数量,     当我们访问网页,向Web服务器请求资源时,资源主要分为静态资源和动态资源(程序处理),  &…

    Linux干货 2016-06-20
  • N25-第六周作业

      复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;               s/要查找的内容/替换为的内容/修饰符 %:全文,相当…

    Linux干货 2017-02-13
  • 磁盘文件挂载与卸载

    挂载(mount)何为挂载?挂载指将文件系统与根文件系统的某个现存的目录建立起来的关联关系,这样我们就可以将目录作为访问磁盘文件的入口,进行存取交互。挂载点:挂载点指的是被挂载的对象,通常挂载点是一个目录,不过有时候也有文件作为挂载点格式:mount 设备 挂载点 ;此挂载方法味临时挂载,只在当前的shell中有效,退出则清除挂载关联设备文件在/dev/sd…

    Linux干货 2017-04-24