未加星标

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

字体大小 | |
[系统(linux) 所属分类 系统(linux) | 发布者 店小二03 | 时间 2016 | 作者 红领巾 ] 0人收藏点击收藏
linux下的进程调度与作业管理 一、概述 1.1 进程的相关概念:

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


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

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

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


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

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

说了这么多,大概大家也应该会明白相关的原理,请看下面这2个图:


Linux下的进程调度与作业管理
二、工作管理 2.1 什么是工作管理

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

2.2 job control 的管理

1. 直接将命令丢到后台中执行的 &

把某些工作直接丢到后台环境中,让我们可以继续操作前台的工作,例如:


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

2. 将目前的工作丢到后台中“暂停” : ctrl + z

比如我们正在编辑/etc/passwd 这个文件,我们发现想要查询一个当前shell的一个其他文件的信息,那么可以使用ctrl+z 这个命令暂时将我们当前的任务挂起


Linux下的进程调度与作业管理
+表示最近一个被丢进后台的工作

3. 查看目前的后台的工作状态: jobs

jobs [-lrs]

选项:

-l 除了列出job number 与命令字串之外 同时列出PID的号码


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

-r 仅列出在后台run运行的工作

-s 仅列出正在后台当中暂停(stop)的工作

4. 将后台工作拿到前台来处理 fg %number

例如:我们可以把刚才的vim 编辑的文件 返回到前台接着进行编辑

[[email protected] test]# fg %3
vim passwd

5. 让工作在后台下的状态变成运行中 bg

例如:执行find / ! -perm /111 > /tmp/text.text 后立即丢到后台去暂停


Linux下的进程调度与作业管理
然后我们运行bg %1 在运行jobs 来查看一下状态
Linux下的进程调度与作业管理
我们会发现现在1 这个作业的状态是在后台运行的running 态

6. 管理后台当中的工作:kill

kill -signal %jobnumber

选项:

-l 这个是L的小写,列出目前kill 能够使用的信号(singnal) 有哪些

signal 代表给予后面接的那个工作什么样的指示


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

这里详细说明以下几个数字的涵义:

-1 重新读取一次参数的配置文件(类似于reload)

-2 代表与有键盘输入 ctrl -c 同样的操作

-9 立刻强制删除一个工作

-15 以正常的程序方式终止一项工作,与-9 不一样的

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


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

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


Linux下的进程调度与作业管理
2.3 进程管理 2.3.1 进程的查看

1. ps命令

选项:

-A 所有进程均显示出来,与-e 具有同样的作用

-a 不与终端 terminal 有关的所有进程

-u 有效用户(effective user)相关的进程

X 通常与a 这个参数一起使用,可列出比较完整的信息

a: 所有与终端相关的进程

x: 所有与终端无关的进程

带[] 的是内核线程

u: 以用户为中心来组织状态信息显示

(1)仅查看自己的bash 相关进程ps -l


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

下面分别讲解一下每一列的意义:

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/NIPriority/Nice 缩写,代表此进程被CPU所执行的优先级,数值越小,代表该进程越快被CPU执行

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

WCHAN 表示目前进程是否运行中,“-” 表示正在运行中

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

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

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

2. 查看系统所有的进程 ps aux
Linux下的进程调度与作业管理
Linux下的进程调度与作业管理

解释一下各个字段的涵义

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 显示出所有的进程


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

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


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

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


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

4. pgrep 命令

pgrep [OPTIONS] “PATTERN”

-U UID 仅显示以指定用户身份运行的进程


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

-G GID 仅显示以指定用户组的身份运行的进程

-I显示PID 和进程名

5. 显示指定命令所启动的进程ID pidof

语法格式 pidof PROGRAM (给定的命令行程序)


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

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软件的按键
Linux下的进程调度与作业管理

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

第一行top

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

本文系统(linux)相关术语:linux系统 鸟哥的linux私房菜 linux命令大全 linux操作系统

分页:12
转载请注明
本文标题:Linux下的进程调度与作业管理
本站链接:http://www.codesec.net/view/483724.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 系统(linux) | 评论(0) | 阅读(40)