linux进程与作业管理

操作系统的组成

image.png

程序员写程序可以实现库调用和系统调用来实现。调用库或者系统,其实就是调用一个已经写好的功能

应用程序调用的过程(系统调用为例)

image.png

执行用户代码,用户空间模式。一旦发起系统调用,执行内核代码就是在内核模式下

内核的功用: 进程管理,文件系统,网络功能,内存管理,驱动程序,安全功能

进程管理

进程:运行的程序一个副本
linux内核存储固定进程的信息在task struct里面

image.png

内存中存在多个进行task结构体,要调用多个进程,每个进程都有一小段空间指向下一个结构体的链,而最后一个结构体,又指向第一结构体
多任务的task struct组成的链表:task list

内核初始化完,创建init进程,后续的进程都是init创建的
进程是父子关系,每一个进程,都由父进程创建,都由fork() 内核调用的接口,向内核请求创建进程。每个进程都由父进程调用fork()启动而来,而后fork()后调用clone()接口,复制自己的数据给子进程

进程优先级

0-139
0-99:实时优先级,数字越大,优先级越高
100-139: 静态优先级,数字越小,优先级越高

NICE值

-20-19 分别对应 100-139

linux内核分为140个队列,等待运行的程序分别放到140个队列里面,当程序运行时,内核扫描队列首部,运行优先级最高程序。还有另外一个140个过期队列,存放已经运行过的处于同一优先级的程序,过期队列等待运行队列的程序运行完毕后,过期队列与运行队列对调

进程内存

page Frame:页框,用于存储页面数据。存储page。可以是不连续的
page:进程中用到的内存页,是连续的

image.png

每个进程都认为只有自己和内核两个程序

进程间通信

IPC: inter process communication
同一主机上:
signal 信号
shm: share memory 共享内存
sememphor 旗语
** 不同主机**
rpc: remote procevure all 远程过程调用
socket:

linux内核:抢占式多任务

进程类型

守护进程: daemon在系统引导过程中,启动的进程
前台进程/用户进程: 用户通过终端打开进程
注:也可把前台送往后台,已守护模式运行

进程状态

运行态: running
就绪态:ready 可以运行,但没有运行(睡眠态)
可中断:interruptable 可以立即运行
不可中断:uninterrupdate 无法运行

进程需要指令加数据,进程启动了,需要加载文件(把文件从磁盘装入内存中),文件很大需要等待。等待过程中需要把cpu让出来,此时数据还没有加载完成,叫醒此进程也无用。此为不可中断状态。等待数据加载完了,就可以叫醒了,此为可中断睡眠


image.png

内核也是进程,有自己的专有内存

停止态: stopped 暂定于内存,但不会调度,除非手动启动 crtl+z
僵尸态: zombie

子进程运行着,父进程挂了。子进程变成孤儿进程,此时孤儿进程结束了,没人处理。子进程也就变成了僵死状态。因此父进程在终结前,应为子进程找到新的父进程或者移交给init进程

进程分类

CPU-Bound: CPU密集型,消耗cpu多,多分cpu
IO-Bound: IO密集型,消耗IO多,调高优先级

linux系统上进程管理工具

pstree

进程树查看

ps

/proc/:内核中的状态信息
内核参数:可以设置从而调整内核/proc/sys运行特性的参数
状态变量:用户输出内核中的统计信息,仅用于查看
进程:/proc/pid/* 保存当前进程的相关状态
ps 查看 /proc/ 下面进程状态
启动进程方式:
系统启动过程中自启动: 与子终端无关的进程
用户通过终端启动:与终端相关的进程

**ps [options]**
unix  必须带-
BSD 必须不带-
长格式带 --

a:与终端相关的进程
x:所有与终端无关的进程
ax 查看所有进程
u:以用户为中心组织进程状态信息显示,显示用户信息
ps aux
VSZ:virtual memory size虚拟内存集,占用虚拟内存(进程占用内存空间,一个是线性地址空间,一个是物理内存空间),虚拟内存集,就是标明进程在线性内存集中占用内存大小
公有库左边和右边两个进程都调用一个公有库
左边的虚拟内存:2个 真正占用的内存是1个
右边的虚拟内存:3个 真正占用的内存是2个

image.png
RSS: 常驻内存集,不能放到交换内存的数据
STAT:当前进程状态(aux)BSD风格
R: RUNNING
S:可中断睡眠
D:不可中断睡眠
T:stopped状态
Z:zombie 僵死状态
+:前台进程
l:多线程进程
N:低优先级进程
<:高优先级进程
s:会话领导者
-------------------------------------------------
# unix风格
-ef
SIMIE:启动时间
C:cpu占用百分比
TIME:累计消耗cpu时间
-F:显示完成格式进程信息
PSR:运行在哪个cpu上
-H:以层级结构,显示进程相关的信息
ps -eFH
o: 可自定义字段,以逗号分隔,filed1,filed2
ps axo pid,comm,psr,ni
常用filed:pid,ni,pri(优先级),psr,pcpu(cpu使用率),comm,tty,ppid,rtprio
ni:nice 值(-20,19)
pri:优先级
rtprio:实时优先级

pgrep pkill

根据进程名查询,或发送信号

pgrep [options] pattern
-u uid:显示用户进程 effective user
-U uid:显示用户进程(常用)real user
[root@ceshi ~]# pgrep -u postfix 显示postfix用户进程
1159
1160
-t TERMAAL:指定终端进程
-l:显示进程名
-a:显示完整格式的进程名
-p pid:显示此进程的子进程
pgrep ssh 显示进程中有ssh名字的
pkill 与pgrep 一样

pidof

取指定进程的进程名,根据进程名取其pid

top

显示linux进程新

Load average:在cpu行等待运行队列长度,队列长度总数量不能大于cpu核心数 1分钟 5分钟 15分钟
ni:调整nice值时,cpu占用百分比
hi:硬件中断,cpu占用百分比
si:软件中断,cpu占用百分比
st:偷走的cpu的百分比,虚拟化程序偷走的百分比
PR:优先级
ni:nice值
VIRI:虚拟内存集
RES:常驻内存集
SHR:共享内存


命令排序方式
M 内存占用的百分比
T cpu占用时间百分比
P 占据cpu百分比排序


首部,关闭命令如下
uptime 信息:l
cpu Task信息:t
内存信息:m

修改刷新时间间隔: s
中止指定进程:k
选项
-d :指定刷新时间间隔默认3秒
-b:以批次方式显示
-n:显示多少批次
top -b  -n 1

htop

top的升级版,支持鼠标点击

F1 帮助,查看子命令
l 能打开一个选定进程的所有文件
s 跟踪一个进程发起的系统调用
t 以层级关系显示进程状态
a 将进程绑定到cpu核心
选项
-d 指定延迟时间间隔
-u 仅显示指定用户的进程
-s 以指定字段排序

vmstat

是用于报告虚拟内存使用的数据

vmstat [options] [delay[count]]
delay 每隔多少秒显示
count 显示多少次
procs:
r: running 等待运行进程的个数,cpu上等待运行的队列长度,实时的top里面的load average是平均值
b:处于不可中断睡眠状态进程个数,被阻塞的队列长度。如果这个大,IO能力比较差

memory:
 swpd: 交换内存使用总量
free: 空闲的物理内存总量
buffer: 用于buffer内存总量
cache:用于cache内存总量

swap:
si:数据进入swap中,数据的平均速率(kb/s)换进
so:数据离开swap的平均速率(kb/s)换出
如果si,so活动频繁,物理内存太小,如果si频繁,so不频繁,问题不算太严重


io:
bi:从块设备读入数据到系统的速度(kb/s)
bo:保存数据到块设备的速率(kb/s)


system:
in: interrupts 中断速率,任何网络报文都可以到达。
当IO设备与cpu交互式,cpu如何知道IO设备与其交互
1.轮询:每隔1秒钟,就去看信号有没有来。
2.通知机制:信号来了,就提前通知cpu
采用的是通知机制,敲一次键盘,就发一次信号,中断cpu一次。
cpu如何知道哪个设备发的信号
有个中断的集线器。连接每一个IO设备,与其对应。用此标识,比如键盘在1号位
cs:context swtich 上下文切换速率,进程被内核的切换速率。如cs 达到上万个,说明被切换的进程太多,cpu太弱了

cpu:
us,sy,id,wa,st

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

pmap

显示一个进程的内存映射表
pmap [options] pid
-x 显示详细信息
cat /proc/1/maps ==> pmap 1

glances

常用选项
-b: 以byte为单位。显示网上数据速率
-d: 关闭磁盘IO模块
-m: 关闭mount模块
-n: 关闭network模块
-t:刷新时间间隔
-I:每颗cpu相关数据单独显示
-o: 指定输出格式的[HTML/CSV]
-f: /PATH/TO/SOMEDIR 设定输出文件的位置
C/S模式下运行glances命令
服务模式:
glances -S -B IPADDR
客户端模式
glances -C IPADDR

dstat

dstat  [-afv] [options] [delay][count]
dstat 2 5 2秒显示一次,显示5次
-c 显示cpu信息
-d 显示disk信息
-C #,#...,total 分别显示每一颗cpu
-D sda,sdb 指明磁盘
-g 显示page相关统计数据(速率数据)
-m: memory 统计相关的数据
-n: 网络相关统计数据
-p:进程相关统计数据
-r:显示io请求相关统计数据
-s:显示swapped的相关统计数据
--top-cpu  显示最占用cpu进程
--top-io 显示最占用IO的进程
--top-mem 显示最占用内存的信息
--top-lantency 延迟最大的进程

kill

终止一个进程,用于向进程发送信号,已实现进程管理
显示当前系统可用的信号 kill -l 
[root@ceshi ~]# kill -l
 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX    
4

每个信号标识方法有三种
1) 信号的数字标识
2) 信号的完整标识
3) 信号的简写名称
向进程发送信号
kill -s single pid
      -SIGNAL
## 常用信号
1 SIGHUP 无须关闭进程,而让其重读配置文件
2 SIGINT 终止正在运行的进程,相当于CRTL+C
9 SIGKILL 杀死进程,不管进程打开的文件,直接杀死
15 SIGTERM 终止正在运行的进程 进程有正在打开的文件,等待文件关闭后。然后在杀死进程
18 SIGCONT 让停止程序继续运行
19 SIGSTOP 让程序停止

kilall

根据进程名,杀死进程
killall []

进程调度

保存现场,恢复现场
现场:一个进程的状态信息,保存在task struct(任务结构),内核为了追踪每一个任务,所以靠一个链表的数据结构保存诸多task struct.task list(任务列表)
cpu: us,sy,ni,id,wa,ni,si,cs(上下文切换),st
Memory:VSZ,RSS,SHM

linux作业机制

job:
前台作业:通过终端启动,且启动会一直占据终端
后台作业:可以通过终端启动,但启动后立即转入后台运行(释放终端)

如何让作业运行于后台

1) 运行中的作业: crtl+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]
-n 指明其nice值
注意:进管理员可以调低nice值

renice命令

renice [-n] NICE PID
调整运行的NICE值
查看NICE值和优先级
ps axo  pid,ni,priority,comm
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260