您的位置:首页 > 运维架构 > Linux

12、linux进程及作业管理

2017-12-17 23:13 274 查看
1、cpu指令级别:

cpu环0级别:存放只能系统调用的指令

cpu环3级别:存放只能用户调用的指令

cpu环1、2级别:由于历史原因,没有使用。

2、操作系统组成:(广义)
计算机硬件、kernel(操作系统:system call,只能系统调用,比较底层)、库调用(library call,为用户编程提供接口)、应用程序。

所谓调用就是将载入别人事先编译好的功能模块,如函数、类、对象等。

3、cpu模式分类:
用户模式:也叫用户空间

内核模式:也叫内核空间

模式切换:用户模式和内核模式之间的切换。

4、应用程序执行过程:
根据编译好的应用程序从上往下执行,当涉及到内核调用的时候,则由内核进行调用执行,执行完成后,返回结果给用户程序,然后用户程序在继续执行,直到程序执行完成。

5、内核功能:
进程管理:其中有个重要的功能就是进程调度

文件系统管理:
网络功能管理

内存管理

驱动程序管理

安全功能管理

6、进程优先级:
进程:process,运行中程序的一个副本(一个程序可以执行多次,多个人可以同时进行),一个程序运行时可能只运行了部分代码,如:ls,ls -l;
进程中可以创建多个执行流,每个执行流运行在一个或一颗cpu上,这样的一个执行流叫做线程,线程可以同时并行运行。

需要注意的是:线程数加上进程数不能超过cpu的核心数,linux系统中线程和进程的区别不大,因为大多数用不到线程。

多个程序同时执行,会用到cpu资源,cpu按时间分片的形式为不同程序提供cpu资源。
那么,当进程运行时,如5秒钟,会切换到其他的进程,需要cpu寄存器来保存中间状态。

7、进程的特点:
进程存在生命周期。

保存一个进程运行的状态的地方,被称为保存现场。

task struct:内核存储进程的固定格式。(链表,循环链表)
任务:进程运行起来以后变成了任务。
多个任务的task struct组成的链表被称为task list(任务列表)

8、进程创建:
内核创建第一个进程:init;后续用户的进程管理都由init实现。

进程特点:

父子进程:进程都由其父进程创建,销毁,内核调用接口(fock()、clone()),允许创建子进程。

父进程指向的内存空间,也是子进程指向的内存空间。
cow:写时复制机制,它是指父进程与子进程共用一段内存空间,当子进程没有写操作时,一直共用这段内存空间;但是当子进程需要写操作时,父进程又要保留老的数据,则此时父进程会给子进程创造一段内存空间,此为写时复制。

9、进程优先级:
0-139:

1-99:实时优先级,数字越大,优先级别越高

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

进程nice值:

指静态优先级,降低优先级

取值范围:-20,19;-20对用100,19对用139

big O:衡量一个程序的复杂程度:

O(1):数据量增加,复杂度增加,解决时间是恒定的。

O(log n):

O(n):线性复杂度,数据量上升,复杂度上升

O(n^2):

O(2^n):

11、进程队列优先级:
运行队列、过期队列,各140个优先级队列;当运行队列中的进程运行完后,过期队列便成了需要的运行队列,运行队列则成了过期队列,一直持续进行。

12、进程task struct结构:

13、进程内存:
page frame:页框,用于存储页面数据,将数据存储在内存中的一个片段中。

内存线性地址:每个内存都以为自己独占内存的所有空间

内存的物理地址:

虚拟内存实现机制:

cpu中的mmu:memory management unit,内存管理单元

ipc:inter process communication,进程间通讯机制
同一主机上:

singal

shm:shared memory

semerphor

不同主机上:

rpc:remote process call,进程过程调用

socket:

14:linux内核:抢占式、多任务执行
进程类型:守护进程、用户进程

守护进程:系统启动时运行的进程,类似windows上的开机进程(开机任务),跟终端无关

用户进程:用户通过终端启动的进程,也可以叫前台进程,需要注意的是,也可以把前台进程送往后台,以守护模式运行。

进程状态:

运行态:running

就绪态:ready

睡眠态:可中断睡眠(interruptable)、不可中断睡眠(uninterruptable)

停止态:暂停于内存中

僵死态:zombie

进程分类:
cpu-bound:cpu密集型的,消耗cpu;非交互式的一般是cpu密集型的

io-bound:i/o密集型的,消耗i/o;交互式的一般是i/o密集型的

cpu密集型的可以多分些cpu,而io密集型的可以调高cpu优先级。

一次I/O过程是指:当一个进程运行时,需要加载的数据,内存中没有,通过请求内核,从硬盘调取数据至内存中的过程。

一次I/O需要分段进行:
第一段:内核从硬盘中读取数据到内核中

第二段:内核将内核内存中的数据复制一份给进程用户使用。

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

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

15、linux上进程管理及查看工具:
pstree、ps、pidof、pgrep、top、htop、glances、pmap、vmstat、dstat、kill、pkill、job、bg、fg、nohup、nice、renice、killall等
注意:进程必须通过init进程与内核打交道。
init守护进程: centos5:sysv init
centos6:upstart
centos7:systemd

15.1、pstree:将进程以树状结构查看查看;对于不同的linux版本看到的顶级进程可能不一样,centos5\6看到的可能是init,而centos7看到的可能是systemd。pstree [-a, --arguments] [-c, --compact] [-h, --highlight-all, -Hpid, --highlight-pid pid] [-g] --show-pgids] [-l, --long] [-n, --numeric-sort] [-N, --ns-sortns [-p, --show-pids] [-s, --show-parents] [-S, --ns-changes] [-u, --uid-changes] [-Z, --security-context] [-A, --ascii, -G, --vt100, -U, --unicode] [pid, user] pstree -V, --version
如: [root@ccc network-scripts]# pstree root //显示root用户的进程树状结构
15.2、ps命令:显示此刻进程的运行状态。
命令用法:ps [options][options]的三种格式:
UNIX 格式: 必须有“-”(which may be grouped and must be preceded by a dash.) BSD 格式:必须不带“-”( which may be grouped and must not be used with a dash.) GNU 格式:可带可不带“-”通用选项: [-]O FILED1,FILED2....:自定义要显示的字段

BSD格式的option: a:所有与终端相关的进程 x:所有与终端无关的进程
ax:显示所有进程(包括与终端相关和无关的进程)
u:以用户为中心组织进程状态信息显示
axO FILED1,FILED2.... 示例:[root@ccc network-scripts]# ps axuUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.4 193628 4436 ? Ss Dec17 0:19 /usr/lib/systemd/systemd --switched-rooroot 2 0.0 0.0 0 0 ? S Dec17 0:00 [kthreadd]root 3 0.0 0.0 0 0 ? S Dec17 0:13 [ksoftirqd/0]注释: USER:运行进程的用户 PID:进程ID %CPU:该进程正在使用的cpu百分比 %MEM:该进程正在使用的内存空间占用比例 VSZ:虚拟内存集,占用虚拟内存大小,虚拟内存是对实体内存占用的虚拟描述
RSS:常驻内存集,不能放在交换内存中;物理内存、交换内存(当物理内存不够用时将数据临时放在交换内存中)
TTY:控制终端
STAT:进程状态;有一下几种状态:
R:running,运行态
S:interruptable slepping,可中断睡眠进程
D:uninterruptable sleeping,不可中断睡眠进程 T:stopped,停止态
Z:zombie,僵死态
+:前台进程
l:多线程进程
N:低优先级进程
<:高优先级进程
s:session leader,会话领导者
START:执行命令的时间即启动进程的时间 TIME: 进程消耗掉的cpu累积时间 COMMAND:执行的进程(命令)是什么
注意1:ps另一组常用的选项是lax,它提供了技术性更强的信息。而且它运行的速度也更快,因为它不必把每个uid转成用户名(如果系统已经因别的某个进程而停顿了,那么效率就显得重要了,运行ps的命令开销一般都很大。注意2:中括号括起来的命令名不是真正的命令,而是按进程方式来调度运行的内核线程。

unix格式的option: -e:相当于axu,以用户为中心的与进程有关和无关的进程信息
-f:完整格式的进程信息
-ef:
-F:显示完整格式的进程信息,比-f更详细 -H:以层级结构显示进程的相关信息
-eO FILED1,FILED2....:示例:[root@ccc network-scripts]# ps -ef[root@ccc network-scripts]# ps -eFUID PID PPID C SZ RSS PSR STIME TTY TIME CMDroot 1 0 0 48407 4328 0 Dec17 ? 00:00:19 /usr/lib/systemd/systemd --switched-rooroot 2 0 0 0 0 0 Dec17 ? 00:00:00 [kthreadd]注释: PPID:父进程id C:cpu占用百分比
PSR:运行在哪颗cpu上
STIME:进程的启动时间
TTY:和终端相关
TIME:进程运行累积时间
CMD:启动此进程的命令

15.3、pgrep、pkillpgrep:基于进程名或其他属性过滤相关的进程pkill:向相关进程信息发送信号
命令格式:pgrep [options] pattern option: -u UID :显示指定用户的进程,可以切换用户,以谁的身份运行的进程也被显示
-U UID:显示指定用户的进程;谁启动的进程
如:pgrep -u root,daemon //过滤root和daemon拥有的进程 -t TERMINAL:与指定的终端相关的进程
-l:显示进程名
-a:显示完整格式的进程名
-P pid:显示此进程的子进程

pkill [options] pattern

15.4:pidof:检索进程标识符(取指定正在进程中的进程号,有些进程不止一个进程号) 如:[root@host2017 ~]# pidof ping
15.5、 top:类似windows中的任务管理器,动态显示进程号,有排序功能 (ps命令只提供系统过去时间的一次性快照,因此,要获得系统上正在发生事情的“全景”往往是非常困难的。top命令对活动进程以及其所使用的资源情况提供定期更新的汇总信息。)

[root@host2017 ~]# toptop - 19:19:09 up 1:53, 3 users, load average: 0.15, 0.14, 0.08Tasks: 176 total, 2 running, 174 sleeping, 0 stopped, 0 zombie%Cpu(s): 10.5 us, 2.4 sy, 0.0 ni, 86.7 id, 0.0 wa, 0.0 hi, 0.4 si, 0.0 stKiB Mem : 999936 total, 104224 free, 542708 used, 353004 buff/cacheKiB Swap: 1572860 total, 1572328 free, 532 used. 247832 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 3024 root 20 0 1462468 177392 46196 S 18.9 17.7 0:55.70 gnome-shell 1183 root 20 0 222736 31060 10632 R 7.3 3.1 0:20.92 Xorg 注释:
第一行:当前时间,可用uptime显示, uptime命令:显示系统时间、运行时长,及平均负载(等待运行的进程的队列长度:平均负载:过去1分钟、过去五分钟、过去15分钟的平均负载)第二行:运行的任务第三行:%cpu:cpu状态百分比;us:没有nice值得用户空间进程;sy:系统空间进程;ni:带有nice值得用户空间进程;id:在内核空间处理程序中花费的时间;wa:等待I/O完成的时间; hi:硬件中断花费的时间;si:软件中断花费的时间;st:被虚拟化偷走的时间
第四行:物理内存空间使用情况第五行:交换分区空间使用情况
VIRT:给出了每个进程分配的虚拟内存量RES:给出了当前映射到特定内存页的那部分内存(驻留集)
注意:top是一个内部交互的命令,敲入L(小写)命令,可以开启或关闭第一行的显示; 敲入"t"命令可以开启或关闭第三四行;敲入"m"命令可以开启或关闭四五两行。
l、m、t可以混合使用。
top排序功能: 敲入“P”(大写p)可以按cpu百分比排序
敲入“m”(大写m)可以按内存百分比排序
敲入“T”(大写t)可以按cpu累积占用时间排序
其他功能: 敲入“q”,退出top
敲入“k”,终止相应pid号的进程
敲入“1”(数字1),分散显示cpu信息

top命令格式: top [options]options: -d #:指定刷新时间间隔,默认为3秒 -b:以批次方式显示,以一屏一屏显示 -n #:显示多少批次,然后退出
15.6、htop:交互式进程查看器,linux系统不自带此程序,需要自行安装。top命令的升级版,支持鼠标操作
交互式命令:
l:此进程打开的文件
s:跟踪系统调用
t:以层级关系显示进程状态
a:将选定的进程绑定至某指定的cpu核心
命令格式: htop [-dChusv] -d #:指定延时时间间隔
-u username:仅显示指定用户的进程
-s colume:以指定的字段进行排序
15.7、vmstat:显示文件或文件系统状态
stat [OPTION]... FILE...OPTION -s:显示内存统计数据信息
[root@host2017 ~]# vmstatprocs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 4 0 81972 77760 36 280368 0 6 284 19 84 424 2 1 97 0 0[root@host2017 ~]# 注释:procs: r:runing;等待运行进程的个数,cpu上等待运行的任务的队列长度,实时的数据 b:处于不可中断睡眠态的进程个数,被阻塞的队列长度memory: swpd:交换内存的使用总量,“0”表示未启用,当swpd的用量很多时,说明物理内存不足 free:空闲的物理内存总量 buff:用于buff的内存总量,衔接两个硬件之间速率不匹配用的 cache:用于cache的内存总量,衔接两个硬件之间速率不匹配用的swap: si:数据进入swap中的数据速率(kb/s),活动频繁数据物理内存不足 so:数据离开swap中的数据速率(kb/s),活动频繁数据物理内存不足
io: bi:从块设备读入数据到到系统内存中的速率(kb/s)
bo:保存数据至块设备的速率(kb/s)
system: in:interrupt,中断速率,每秒中断的个数
cs:contextswitch,上下文切换的速率(进程切换)
cpu: us:用户空间
sy:系统空间
id:内核空间处理程序花费的时间
wa:等待I/O完成的时间
st:被虚拟化技术所偷走的时间
15.8:pmap命令:报告进程的内存映射表 格式:
pmap [options] pid [...]options: -x:显示详细信息

如:[root@host2017 ~]# pmap `pidof bash`[root@host2017 ~]# pmap 1
15.9、glances命令:需要自行安装,他是一个python语言编写的程序。开平台的监控软件




c/s模式下运行glance程序: server端:192.168.5.128为服务器端的ip地址
[root@host2017 ~]# glances -s -B 192.168.5.128 Glances server is running on 192.168.5.128:61209 客户端:
[root@host2017 ~]# glances -c 192.168.5.128
15.9、dstat命令:系统自带的程序,生成系统资源统计数据的工具,它几乎融合以上的所有的工具。



dstat命令格式:
dstat [-afv] [options..] [delay [count]]
options:

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

-C #,#..,total:实现那一颗cpu的信息

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

-D,sda,sdb..total:显示哪块磁盘的信息

-g:显示page相关的统计数据,速率数据
-m:内核相关的统计数据

-n:网络相关的统计数据

-p:进程相关的统计数据

-r:显示I/O请求的相关统计数据

-s:显示swapped的相关统计数据

--tcp:
--udp:

--raw:

--socket

--ipc:

--top-cpu:最占cpu的进程

--top-io:最占io的进程

--top-memory:最占内存的进程

--top-lantency:延迟最大的进程

15.10、kill命令:向进程发送信号,以实现对进程的管理
显示可用信息:
kill -l [signal]
注意:每个进程的标识方法有三种:
1、信号的数字标识
2、信号的完整名称标识
3、信号的简写名称
示例:
[root@localhost ~]# kill -l //显示信号信息
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL10) SIGUSR1
11) SIGSEGV12) SIGUSR213) SIGPIPE14) SIGALRM15) SIGTERM
16) SIGSTKFLT17) SIGCHLD18) SIGCONT19) SIGSTOP20) SIGTSTP
21) SIGTTIN22) SIGTTOU23) SIGURG24) SIGXCPU25) SIGXFSZ
26) SIGVTALRM27) SIGPROF28) SIGWINCH29) SIGIO30) SIGPWR
31) SIGSYS34) SIGRTMIN35) SIGRTMIN+136) SIGRTMIN+237) SIGRTMIN+3
38) SIGRTMIN+439) SIGRTMIN+540) SIGRTMIN+641) SIGRTMIN+742) SIGRTMIN+8
43) SIGRTMIN+944) SIGRTMIN+1045) SIGRTMIN+1146) SIGRTMIN+1247) SIGRTMIN+13
48) SIGRTMIN+1449) SIGRTMIN+1550) SIGRTMAX-1451) SIGRTMAX-1352) SIGRTMAX-12
53) SIGRTMAX-1154) SIGRTMAX-1055) SIGRTMAX-956) SIGRTMAX-857) SIGRTMAX-7
58) SIGRTMAX-659) SIGRTMAX-560) SIGRTMAX-461) SIGRTMAX-362) SIGRTMAX-2
63) SIGRTMAX-164) SIGRTMAX
[root@localhost ~]#

向进程发送信号:
kill [-s signal|-p] [-q sigval] [-a] [--] pid...
示例:
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# systemctl start httpd.service
[root@localhost ~]# ps aux | grep httpd
[root@localhost ~]# kill -s 15 5629 //向进程id:5629发送kill的15号指令

常用信号:
1) SIGHUP:无需关闭进程,而让其重读配置文件

如:
[root@localhost ~]# kill -1 5739
[root@localhost ~]# kill -SIGHUP 5722

[root@localhost ~]# kill -HUP 5628
2) SIGINT:终止正在运行的进程,相当于ctrl+c(打断)
如:[root@localhost ~]# kill -2 5973
9) SIGKILL:杀死运行中的进程,不管是否正在操作文件,比较危险
15) SIGTERM:终止运行中的进程,有通知消息
18) SIGCONT

19) SIGSTOP:

15.11、killall命令:根据进程名来kill进程
killall [-Z, --context pattern] [-e, --exact] [-g, --process-group] [-i, --interactive] [-o, --older-than TIME] [-q, --quiet] [-r, --regexp] [-s, --signal signal] [-u, -- user user] [-v, --ver‐bose] [-w, --wait] [-y, --younger-than TIME] [-I, --ignore-case] [-V, --version] [--] name ...
killall -l
killall -V, --version

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  进程 任务