带你了解操作系统的组成和进程的管理

1 操作系统的组成

1.1 操作系统的五大功能

内存:主要进行内存的分配和管理 ( 内存分配、地址映射、内存保护与共享、虚拟内存等
cpu:计算机进行算术和逻辑运算的设备(中央处理器cpu)
磁盘大小:计算机可以存储数据的容量
读写性能:计算机内部和外部数据传输的速度;输入输出速度指的是计算机与外部设备进行数据交互的速度
网络:终端设备和终端设备进行交互的途径

1.2 常用查看命令

功能命令
内存free, top
cputop, ps aux(单个进程),w,uptime,vmstat
磁盘大小大小:lsblk 剩余:df
读写性能读写:iostat vmstat (dd写入)
网络dmstat iftop 需要安装依赖包(pepl-release.noarch)

1.3 查看命令实操

free top

ps aux

lsblk df

iostat vmstat

dstat iftop

2 程序和进程

2.1 进程的定义

运行中的程序叫做进程,运行在内存中,各个进程被PID标记,UID、GID语境决定文件系统的存取和访问权利,通常从执行进程的用户来继承,存在生命周期,都由其父进程创建。init第一个进程,从Centos7之后为systemd

2.2 进程的特点

  • 动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;

  • 并发性:任何进程都可以同其他进程一起并发执行;

  • 独立性:进程是系统进行资源分配和调度的一个独立单位;

  • 结构性:进程由程序、数据和进程控制块三部分组成。

2.3 如何查看一个程序是多线程还是单线程

/proc 进程PID号储存路径

grep -i threads /proc/进程的PID/status

prtstat 进程pid号

僵尸进程

一个进程结束了,但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程,因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init来接管它,成为它的父进程,子进程退出后init会回收其占用的相关资源。但是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。

将父进程停止,杀死子进程使其进入僵尸态

查看进程stat状态为Z

清理僵尸进程方法:

方法一:恢复父进程

方法二:杀死父进程,可以查看僵尸态进程不存在了

2.4 进程使用内存可能产生的问题

  • 内存泄漏:Memory Leak 序中用malloc或new申请了一块内存,但是没有用free或delete将内存释放,导致这块内存一直处于占用状态
  • 内存溢出:Memory Overflow 序申请了10M的空间,但是在这个空间写入10M以上字节的数据,就是溢出
  • 内存不足:OOM Out Of Memory,“内存用完了”,在情况在java程序中比较常见。系统会选一个进程将之杀死,在日志messages中看到类似下面的提示

原因:

给应用分配内存太少:比如虚拟机本身可使用的内存(一般通过启动时的VM参数指定)太少。

应用用的太多,并且用完没释放,浪费了。此时就会造成内存泄露或者内存溢出。

使用的解决办法:

1,限制java进程的max heap,并且降低java程序的worker数量,从而降低内存使用

2,给系统增加swap空间

2.5 进程状态

进程的基本状态
  • 创建状态:进程在创建时需要申请一个空白PCB(process control block进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态

  • 就绪状态:进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行

  • 执行状态:进程处于就绪状态被调度后,进程进入执行状态

  • 阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用

  • 终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。

    状态之间的转换情况

    运行——>就绪:1,主要是进程占用CPU的时间过长,而系统分配给该进程占用CPU的时间是有限的;

    2,在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出CPU,

    该进程便由执行状态转变为就绪状态

    就绪——>运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU

    运行——>阻塞:正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态,如

    发生了I/O请求

    阻塞——>就绪:进程所等待的事件已经发生,就进入就绪队列

    以下两种状态是不可能发生的:

    阻塞——>运行:即使给阻塞进程分配CPU,也无法执行,操作系统在进行调度时不会从阻塞队列进行

    挑选,而是从就绪队列中选取

    就绪——>阻塞:就绪态根本就没有执行,谈不上进入阻塞态

特殊的进程状态:
  • 运行态:running

  • 就绪态:ready

  • 睡眠态:分为两种,可中断:interruptable,不可中断:uninterruptable

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

  • 僵死态:zombie,僵尸态,结束进程,父进程结束前,子进程不关闭,杀死父进程可以关闭僵死态 的子进程

2.6 进程的优先级

顺序查看进程的PID

ps axo pid,comm,ni

进程优先级调整:

查看进程的优先级:ps -elf |head

静态优先级:100-139

进程默认启动时的nice值为0,优先级为120。调整范围为-20--19 (临时调整,重启失效)

nice -n -数字 提高

renice -n -数字 降低

只有在根目录才能降低nice值

2.7 进程分类

操作系统分类:
  • 协作式多任务:早期 windows 系统使用,即一个任务得到了 CPU 时间,除非它自己放弃使用CPU ,否则将完全霸占 CPU ,所以任务之间需要协作——使用一段时间的 CPU ,主动放弃使用

  • 抢占式多任务:Linux内核,CPU的总控制权在操作系统手中,操作系统会轮流询问每一个任务是否需要使用 CPU ,需要使用的话就让它用,不过在一定时间后,操作系统会剥夺当前任务的 CPU 使用权,把它排在询问队列的最后,再去询问下一个任务

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

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

注意:两者可相互转化

按进程资源使用的分类:
  • CPU-Bound:CPU 密集型,非交互

  • IO-Bound:IO 密集型,交互

3 进程管理相关命令

号代号信号名称说明
1SIGHUP该信号让进程立即关闭.然后重新读取配置文件之后重启
2SIGINT程序中止信号,用于中止前台进程。相当于输出 Ctrl+C 快捷键
3SIGQUIT退出
8SIGFPE在发生致命的算术运算错误时发出。不仅包括浮点运算错误,还包括溢出及除数为 0 等其他所有的算术运算错误
9SIGKILL用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。般用于强制中止进程
14SIGALRM钟定时信号,计算的是实际的时间或时钟时间。alarm 函数使用该信号
15SIGTERM正常结束进程的信号,kill 命令的默认信号。如果进程已经发生了问题,那么这 个信号是无法正常中止进程的,这时我们才会尝试 SIGKILL 信号,也就是信号 9
18SIGCONT该信号可以让暂停的进程恢复执行。本信号不能被阻断
19SIGSTOP该信号可以暂停前台进程,相当于输入 Ctrl+Z 快捷键。本信号不能被阻断

3.1 ps命令

支持三种选项:
  • UNIX选项 如:-A , -e

  • GNU选项 如: --help

  • BSD选项 如:a

查看静态的进程统计信息
  • "ps aux" 可以查看系统中所有的进程;

  • "ps -le" 可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级;

  • "ps -l" 只能看到当前 Shell 产生的进程;

常用选项说明
a显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将示系统中所有的进程信息。
u使用以用户为主的格式输出进程信息。
x显示当前用户在所有终端下的进程信息。
-e显示系统内的所有进程信息。
-l使用长(Long)格式显示进程信息。
-f使用完整的(Full)格式显示进程信
k|--sort属性 对属性排序,属性前加 - 表示倒序 ps aux k -%cpu
o属性… 选项显示定制的信息 pid、cmd、%cpu、%mem

3.2 ps aux

行头注释说明
USER该进程是由哪个用户产生的。
PID进程的 ID。
%CPU该进程占用 CPU 资源的百分比,占用的百分比越高,进程越耗费资源。
%MEN该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源。
VSZ该进程占用虚拟内存的大小,单位为 KB。
RSS该进程占用实际物理内存的大小,单位为 KB。
TTY该进程是在哪个终端运行的。其中,tty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端),tty1~tty6 是本地的字符界面终端,tty7 是图形终端。pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,第二个远程连接占用 pts/1,依次増长。?代表和终端无关,系统进程
STAT进程状态。常见的状态有以下几种: -D:不可被唤醒的睡眠状态,通常用于 I/O 情况。 -R:该进程正在运行。 -S:该进程处于睡眠状态,可被唤醒。 -T:停止状态,可能是在后台暂停或进程处于除错状态。 -W:内存交互状态(从 2.6 内核开始无效)。 -X:死掉的进程(应该不会出现)。 -Z:僵尸进程。进程已经中止,但是还是占用硬件资源。 -<:高优先级(以下状态在 BSD 格式中出现)。 -N:低优先级。 -L:被锁入内存。 -s:包含子进程。 -l:多线程(小写 L)。 -+:位于后台。
START该进程的启动时间。
TIME该进程占用 CPU 的运算时间,注意不是系统时间。
COMMAND产生此进程的命令名。

3.3 ps -ef

表头说明
F进程标志,说明进程的权限,常见的标志有两个: 1:进程可以被复制,但是不能被执行;4:进程使用超级用户权限;
S进程状态。具体的状态和"psaux"命令中的 STAT 状态一致
UID运行此进程的用户的 ID;
PID进程的 ID;
PPID父进程的 ID;
C该进程的 CPU 使用率,单位是百分比;
PRI进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行;系统定义不可以人为修改
NI进程的优先级,数值越小,该进程越早被执行;可以人为修改
ADDR该进程在内存的哪个位置;
SZ该进程占用多大内存;
WCHAN该进程是否运行。"-"代表正在运行;
TTY该进程由哪个终端产生;
TIME该进程占用 CPU 的运算时间,注意不是系统时间;
CMD产生此进程的命令名;

3.4 PRI和NI的关系如下

PRI(最终值)=PRI(原始值)+NI

修改 NI 的值就可以改变进程的优先级即可。NI 值越小,进程的 PRI 就会降低,该进程就越优先被 CPU 处理;反之,NI 值越大,进程的 PRI 值就会増加,该进程就越靠后被 CPU 处理。

修改 NI 值时有几个注意事项:

  • NI 范围是 -20~19。

  • 普通用户调整 NI 值的范围是 0~19,而且只能调整自己的进程。

  • 普通用户只能调高 NI 值,而不能降低。如原本 NI 值为 0,则只能调整为大于 0。

  • 只有 root 用户才能设定进程 NI 值为负值,而且可以调整任何用户的进程。

3.5 查看进程信息

prtstat PID号

4 top 命令

动态持续查看进程运行状态,并提供了一个交互界面,用户可以根据需要,人性化地定制自己的输出

选项说明
-d指定top每隔几秒更新,默认是三秒
-b使用批量处理模式,一般和-n一起使用,用于把top命令重新定向到文件中
-n指定top的执行次数,一般和-选项合用
-p仅查看指定ID的进程
-s使top命令在安全模式中运行,避免在叫交互模式中出现错误
-u只监听某个用户的进程

4.1 top命令的交互窗口

交互指令说明
?或h显示交互模式的帮助
c按照 CPU 的使用率排序,默认就是此选项
M按照内存的使用率排序
N按照 PID 排序
T按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序
k按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号
r按照 PID 给某个进程重设优先级(Nice)值
q退出 top 命令

4.2 行头备注

行头说明
12:26:46系统当前时间
up 1 day, 13:32系统的运行时间.本机己经运行 1 天 13 小时 32 分钟
2 users当前登录了两个用户
load average: 0.00,0.00,0.00系统在之前 1 分钟、5 分钟、15 分钟的平均负载。如果 CPU 是单核的,则这个数值超过 1 就是高负载:如果 CPU 是四核的,则这个数值超过 4 就是高负载 (这个平均负载完全是依据个人经验来进行判断的,一般认为不应该超过服务器 CPU 的核数)
Tasks: 95 total系统中的进程总数
1 running正在运行的进程数
94 sleeping睡眠的进程数
0 stopped正在停止的进程数

0 zombie 僵尸进程数。如果不是 0,则需要手工检查僵尸进程

top 命令的输出内容是动态的,默认每隔 3 秒刷新一次。命令的输出主要分为两部分:

  1. 第一部分是前五行,显示的是整个系统的资源使用状况,我们就是通过这些输出来判断服务器的资源使用状态的;

  2. 第二部分从第六行开始,显示的是系统中进程的信息;

5 pgrep命令

选项说明
-U指定用户
-l显示进程名
-a显示完整格式的进程名
-P pid显示指定进程的子进程

5.1 pidof

已知程序名查询pid号

5.2 命令进程数

pstree 进程号/用户名

常用选项 -a 显示启动每个进程对应的完整指令,包括启动进程的路径、参数等 -p 显示PID -T 不显示线程thread,默认显示线程 -u 显示用户切换 -H pid 高亮显示指定进程及其前辈进程

5.3 lsof

lsof 【选项】列出已经打开的文件

-c 字符串 只列出以字符串开头的进程打开的文件。

+d 目录名 列出某个目录中所有被进程调用的文件。

-u 用户名 只列出某个用户的进程打开的文件。

-p pid 列出某个 PID 进程打开的文件。

5.4 vmstat

动态查看资源使用情况

5.5 iostat

可以提供更丰富的IO性能状态数据

5.6 iotop

监视磁盘吞吐量

5.7 uptime

系统运行多长时间

5.8 mpstat

显示cpu相关统计

5.9 dstat

系统资源统计

5.10 webadin

图形界面

6 进程的启动方式

6.1 启动方式

  • 前台启动:通过终端启动,且启动后一直占据终端

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

6.2 挂后台再恢复

ctrl+z 运行中的程序(放到后台,但是会停止作业)

&尚未启动的作业

查看后台命令

jobs

把后台命令调回前台 fg +序号

继续任务 bg+工作号

6.3 并行执行任务

&

6.4 killall

killall 程序名 通过程序名结束进程及其子进程

7 计划任务

7.1 at一次性任务

at 选项 时间

at [HH:MM] [yyyy-mm-dd]

at队列存放在/var/spool/at目录中,

设定好内容之后ctrl+d提交

7.2 crontab周期任务

crontab -e 打开任务编辑界面

项目说明范围
第一个*一小时当中的第几分钟(minute)0~59
第二个*一天当中的第几小时(hour)0~23
第三个*一个月当中的第几天(day)1~31
第四个*一年当中的第几个月(month)1~12
第五个*一周当中的星期几(week)0~7(0和7都代表星期日)

时间表示的特殊符号

特殊符号含义
*号代表任何时间(每分钟或者每小时都执行一次)
,号代表不连续的时间
-号代表连续的时间
/号代表每个多久执行一次

在书写 crontab 定时任务时,需要注意以下几个事项:

  • 6 个选项都不能为空,必须填写。如果不确定,则使用“*”代表任意时间。

  • crontab 定时任务的最小有效时间是分钟,最大有效时间是月。像 2018 年某时执行、3 点 30 分 30 秒这样的时间都不能被识别。

  • 在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都以天为单位,非常容易让管理员混淆。

  • 在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径。有时使用相对路径的命令会报错。

8 病毒的解决思路

中病毒很明显的表现形式:内存使用量过高 1.通过ps aux 找到内存/spu使用过高的应用程序 2.然后进到 prog 的 pid 文件下通过 xe的软连接来找到他的位置 并将他删掉 3.、然后在同目录下先建一个同名文件,并加上一个不可删除的权限,可以暂时缓解病毒的问题,再顽强就解决不了了,只能重装系统

9 误删的文件如何找回

误删的文件可以找回,有人在使用的情况下可以使用 lsof |grep delete 找回删除文件 echo “ ” > bigfile

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值