1 操作系统的组成
1.1 操作系统的五大功能
内存:主要进行内存的分配和管理 ( 内存分配、地址映射、内存保护与共享、虚拟内存等)
cpu:计算机进行算术和逻辑运算的设备(中央处理器cpu)
磁盘大小:计算机可以存储数据的容量
读写性能:计算机内部和外部数据传输的速度;输入输出速度指的是计算机与外部设备进行数据交互的速度
网络:终端设备和终端设备进行交互的途径
1.2 常用查看命令
| 功能 | 命令 |
|---|---|
| 内存 | free, top |
| cpu | top, 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 进程管理相关命令
| 号代号 | 信号名称 | 说明 |
|---|---|---|
| 1 | SIGHUP | 该信号让进程立即关闭.然后重新读取配置文件之后重启 |
| 2 | SIGINT | 程序中止信号,用于中止前台进程。相当于输出 Ctrl+C 快捷键 |
| 3 | SIGQUIT | 退出 |
| 8 | SIGFPE | 在发生致命的算术运算错误时发出。不仅包括浮点运算错误,还包括溢出及除数为 0 等其他所有的算术运算错误 |
| 9 | SIGKILL | 用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。般用于强制中止进程 |
| 14 | SIGALRM | 钟定时信号,计算的是实际的时间或时钟时间。alarm 函数使用该信号 |
| 15 | SIGTERM | 正常结束进程的信号,kill 命令的默认信号。如果进程已经发生了问题,那么这 个信号是无法正常中止进程的,这时我们才会尝试 SIGKILL 信号,也就是信号 9 |
| 18 | SIGCONT | 该信号可以让暂停的进程恢复执行。本信号不能被阻断 |
| 19 | SIGSTOP | 该信号可以暂停前台进程,相当于输入 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 秒刷新一次。命令的输出主要分为两部分:
-
第一部分是前五行,显示的是整个系统的资源使用状况,我们就是通过这些输出来判断服务器的资源使用状态的;
-
第二部分从第六行开始,显示的是系统中进程的信息;
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
本文详细介绍了操作系统的核心组件,如内存管理、CPU、磁盘容量和网络,以及进程的定义、特点、查看与管理,包括进程状态、优先级调整和常用的系统工具如ps、top、vmstat等。此外,还涵盖了病毒处理和误删文件恢复的方法。
376

被折叠的 条评论
为什么被折叠?



