linux进程及作业管理

linux进程及作业管理

cpu指令权限等级:

特权级也叫hierarchical protection domains, 有的也叫用户态. 是一种用来保护数据和阻止恶意行为的机制. 电脑操作系统提供不同权限访问级别的资源. 特权级分为四级, 特权级0,1,2,3. 在windows中只使用特权级0和特权级3, 特权最高的是特权级0, 可以直接操作硬件, 如CPU和内存, 一般操作系统和驱动运行在此级别下. 特权级3是给一般用户程序使用的, 可以调用基本的cpu指令

kernel –> ring0 –> ring1 –> ring2 –> ring3

linux系统的组成部分: 内核 + 根文件系统

内核的功用: 进程管理、内存管理、网络协议栈、文件管理

用户模式

内核模式

模式切换

Process: 运行中的程序的一个副本;进程有自己的生命周期

linux内核存储进程信息的固定格式: task struct

多个任务的task struct 组件的链表: task list

进程创建: 

init进程: 初始化进程, 是内核加载的第一个进程, 是其他所有进程的父进程

进程: 都是由其父进程创建

fork(), clone()

进程优先级: 

1-139:

0-99: 实时优先级

100-139: 静态优先级; 数字越小, 优先级越高

nice值:

-20, 19

Big O标准: 衡量进程消耗的时间

O(1), O(logn), O(n), O(n^2), O(2^n)

进程内存: 

Page Frame: 页框, 用于存储页面数据

存储Page 

MMU: Memory Management Unit, 内存管理单元

IPC机制: Inter Process Communication(进程通信)

同一主机上:

signal

shm: share memory

semerrohor(老式)

不同主机:

rpc机制: remote procecure call, 远程过程调用

socket: 套接字通信, 

linux内核: 抢占式多任务进程

进程类型:

守护进程: daemon, 在系统引导过程中启动的进程, 跟终端无关的进程

前台进程: 跟终端相关, 通过终端启动的进程

注意: 也可把在前台启动的进程送往后台, 以守护模式运行

进程状态: 

运行态: running

就绪态: ready

睡眠态:

可中断睡眠: interruptable

不可中断睡眠: uninterruptable

停止态: 暂停于内存中, 但不会被调度, 除非手动启动; stopped

僵死态: zombie

进程的分类:

CPU-Bound

IO-Bound

linux上的进程查看及管理工具:

pstree,ps,pidof, pgrep, top, htop, glances, pmap, vmstat, dstat, kill, pkill, jobs, bg, fg, nohup, nice, renice, kuillall, …

CentOS 5: SysV init

CentOS 6: upstart

CentOS 7: systemd

/sbin/init

1、pstree: 

显示进程树

2、ps – report a snapshot of the current process. 报告当前进程的快照

/proc/: 内核中的状态信息

内核参数: 可设置其值从而调整内核运行特性的参数; /proc/sys/

状态变量: 其用于输出内核中统计信息或状态信息, 仅用于查看

参数: 模拟成文件系统类型;

进程: /proc/#

#: 进程PID

用法:

ps [OPTIONS]

选项有三种风格:

UNIX options

BSD options

GNU long options

启动进程的方式:

系统启动过程中自动启动: 与终端无关的进程;

用户通过终端启动: 与终端相关的进程;

选项:

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

x: 所有与终端无关的进程 u: 以用户为中心组织进程状态信息显示; 并显示出是哪个用户的名称

常用组合1:  aux 三个选项通常组合起来使用

STAT: 进程状态

R: running

S: interruptable sleeping

D: uninterruptable sleeping

T: Stopped

Z: zombie

+: 前台进程

l: 多线程进程

N: 低优先级进程

<: 高优先级进程

s: session leader

TIME: 累计占用CPU的时间

COMMAND: 由哪个命令启动的进程, 其中带[]的表示内核线程

VSZ: 虚拟内存集, 占用的内存大小

RSS: 常驻内存集, Resident Size, 不能移动到交换内存中

-e: 显示所有进程

-f: 显示完成格式的进程信息

-ef: 显示完成格式的所有进程的信息

STIME: 启动时间

TIME: 累计运行的时间

C: CPU的占用百分比, cpu utilization

-F: 显示完成格式的进程信息

ps -eF

PSR: 显示运行在哪颗CPU上

-H: 以层级结构显示进程的相关信息, 显示父进程和子进程的层级结构

o field1, field2, …: 自定义要显示的字段, 各选项之间以 , 间隔

常用fields: pid, ni, pri, psr, pcpu, stat, comm, tty, ppid, rtprio

ni: nice值;[-20,19]

priority: 优先级

rtprio: real time priority, 实时优先级

常用组合:

ps -eFH

ps -eo

ps axo

3、pgrep、pkill – 查询进程或者向进程发送信号

– look up or signal processes based on name and other attributes

pgrep [option] pattern

选项:

-u UID: effective user显示指定用户的进程

-U UID: 以谁的身份启动, 真正的用户

-t TERMINAL: 与指定的终端相关的进程

-l: 显示进程名

-a: 显示完整格式的进程名

-P PID: 显示其父进程, 显示此进程的子进程

4、pidof – 取指定进程名称的PID

5、top – display linux processes, 动态显示进程信息

排序方式:

P: 以占据CPU的百分比

M: 以占用内存百分比

T: 以累计占用CPU时间进行排序

首部信息:

uptime信息, l 命令: 显示系统时间, 运行时长和平均负载

过去一分钟, 五分钟, 15分钟的平均负载

等待运行的进程队列的长度

tasks及cpu信息,  t 命令: 

us: 用户占用的空间百分比

sy:

ni: 硬件中断

si: 软件中断

st: 被偷走的百分比

内存及CPU信息, m 命令

PID: 

PR: 优先级

NI: nice值

RES: 常驻内存集

VIRT: 虚拟内存集

SHR: 共享内存空间

S: 当前状态

退出  q

修改刷新时间间隔: s  输入时间间隔

终止指定的进程: k

选项::

-d #: 指定刷新时间间隔,默认3秒

-b: 以批次方式显示

-n #: 显示多少批次

uptime 命令

内核的功能: 进程管理(进程调度)

进程调度: 保存现场, 恢复现场

task struct: 任务结构

task list: 任务列表

CPU : us, sy, ni, id(空闲时间比例), hi, si, cs(处理上下文切换消耗的时间百分比) ,st(虚拟化技术分走的比例)

Memory: VSZ(虚拟内存集), RSS(常驻内存集), SHM(共享内存集)

命令: pstree, pgrep, pkill, ps, top, uptime

linux进程及作业管理(2)

epel yum仓库

$releasever: 发行的主版本号

$basearch: 架构

1、 htop:

-d #: 指定延迟时间的间隔

-u UserName: 仅显示指定用户的进程

-s COLUME: 以指定的字段进行排序

子命令:

F1: 获取帮助

l: 显示选定的进程打开的文件列表

s: 跟踪选定的进程执行的系统调用

F5 | t: 以树状结构显示进程的层级结构

a: 将选定的进程绑定至某指定的CPU核心

F2: 设定

2、vmstat – 报告虚拟内存的统计数据

vmstat [options] [delay[count]]

delay[count] :

delay: 延迟时间

count: 以delay指定的延迟时间显示的次数

proc: 

r: running, 处于等待运行的进程的个数, 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: 数据尽量小一些好, 数值变大,说明CPU功能不足

in: interrupts, 中断速率 

cs: context switch, 上下文切换的速率

cpu: 

us: user space, 用户空间

sy: system

id: idle, 空闲的

wa: wait, 等待完成

st: stolen, 虚拟化技术占用的比例

option:

-s: 显示内存统计数据

3、pmap – 报告内存的映射表, report memory map of a process

pmap [option] pid […]

-x: 显示详细格式的信息

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

4、glances – 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: 远程服务器的地址

5、dstat – versatile tool for generating system resource statistics, 

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

常用选项:

-c, –cpu: 显示cpu的相关信息

-C #, #,…,total

-d, –disk: 显示磁盘的相关信息

-D sda, sdb,…total

-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: 延迟最大的进程

6、kill – terminate a process

用于向进程发送信号, 以实现对进程的管理

显示当前系统可用信号

kill -l[signal]

每个信号的标识方法有三种:

(1)信号的数字标识

(2)信号的完成名称

(3)信号的简写名称

向进程发送命令

kill [-s signal | -SIGNAL] pid…

常用信号:

(1)SIGHUP: 无须关闭进程而让其重读配置文件

(2)SIGINT: 终止正在运行的进程, 相当于ctrl+c

(9)SIGKILL: 强制终止、杀死运行中的进程;

(15)SIGTERM: 终止正在运行中的进程, 一般是后台进程

(18)SIGCONT: 继续运行停止的后台进程, 可以使用  fg 

(19)SIGSTOP: 停止在前台运行的进程, 送到后台, 可以使用ctrl + z 

7、killall – kill processes by name

killall [-SIGNAL] <program name>

linux系统作业控制

job:

前台作业(foreground): 通过终端启动, 且启动后会一直占据终端

后台作业(background): 可以通过终端启动, 但启动后即转入后台运行(释放终端)

如何让作业运行于后台?

(1)运行中的作业

ctrl + z

注意: 送往后台后, 作业会转为停止态

(2)尚未启动的作业

#COMMAND &

注意: 此类作业虽然被送往后台, 但其依然与终端相关; 如果希望把送往后台的作业剥离与终端的关系:

# nohup COMMAND &

查看所有的作业:

jobs

可实现作业控制的命令

fg [[%] JOB_NUM]: 把指定的作业调回前台

bg [[%] JOB_NUM]: 让送往后台的作业在后台继续运行

kill [% JOB_NUM]: 终止指定的作业

进程优先级调整

可通过nice值调整的优先级范围: 100-139

分别对应于: -20, 19之间

进程启动时, 其nice值默认为0, 其优先级是120

nice – 以指定的nice值启动并运行命令

nice [options] [command [ARGU…]]

常用选项:

-n NICE: 指定nice值

注意: 仅管理员可以调低nice值

renice – 调整运行中的进程的优先级

renice [-n] NICE PID…

查看Nice值和优先级:

ps axo pid,ni,priority,comm | grep …

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

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code