一.程序和进程
1.什么是程序:
-
静静地躺在硬盘上的是程序
-
是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化根据。
-
描述进程要完成的功能,控制进程去执行指令
2.什么是进程:
-
运行的程序在内存中的叫进程
-
电脑用pid来识别进程;程序运行,系统自动分配pid-
-
存在生命周期
-
都由其父进程创建
3.进程具有特性
-
动态性:进程是程序一次执行过程,临时的。
-
并发性:进程执行任务时任何进程都可以同其他进程一起执行。
-
独立性:进程是系统进行资源分配和调度的一个独立单位
-
结构性:进程由程序、数据和进程控制块三部分组成
4.线程
- 线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间
5.协程是什么
是一种基于线程之上,但又比线程更加轻量级的存在
一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程
协程特点
线程的切换由操作系统负责调度,协程由用户自己进行调度,因此减少了上下文切换,提高了效率。
由于在同一个线程上,因此可以避免竞争关系而使用锁。
协程应用场景
适用于被阻塞的,且需要大量并发的场景。但不适用于大量计算的多线程,遇到此种情况,更好实用线程去解 决。
6.进程和线程的区别
-
线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
-
一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;
-
调度和切换:线程上下文切换比进程上下文切换要快得多
-
程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见
-
进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进
7.查看线程的命令
pstree
pstree -p
8.进程
进程的状态:
创建状态
就绪状态
执行状态
阻塞状态
终止状态
僵死状态
9.进程之间通讯
- p 管道符 连接通讯
10.进程优先级
PR+NI 相加取最小值
PR:系统优先级
NI:用户优先级
11.进程分类
-
协作式多任务:早期 windows 系统使用,即一个任务得到了 CPU 时间,除非它自己放弃使用CPU ,否则将完全霸占 CPU ,所以任务之间需要协作——使用一段时间的 CPU ,主动放弃使用
-
抢占模式:Linux内核,CPU的总控制权在操作系统手中,操作系统会轮流询问每一个任务是否需要使用 CPU ,需要使用的话就让它用,不过在一定时间后,操作系统会剥夺当前任务的 CPU 使用权,把它排在询问队列的最后,再去询问下一个任务
12.进程类型
- 守护进程:和系统连带的,系统不死,守护进程不死
- 前台进程:执行窗口在进程在,窗口被关闭进程被关闭
二.如何管理进程
查看进程
分析进程
结束进程
开启进程
1.查看进程
1.1 ps 查看静态进程统计信息
ps aux 可以查看系统中所有的进程
a :显示当前终端下的所有进程信息,包括其他用户的进程。
u ; 使用以用户为主的格式输出进程信息
x ;显示当前用户在所有终端下的进程信息
1.2# 查看进程信息 prtstat
1.3 top 命令可以动态地持续监听进程地运行状态
选项:
- -d 秒数:指定 top 命令每隔几秒更新。默认是 3 秒;
- -b:使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中;
- -n 次数:指定 top 命令执行的次数。一般和"-"选项合用;
- -p 进程PID:仅查看指定 ID 的进程;
- -s:使 top 命令在安全模式中运行,避免在交互模式中出现错误;
- -u 用户名:只监听某个用户的进程
1.4> top -d 进程pid号
1.5top窗口信息解读
1.5.1第一段内容行为任务队列信息,具体内容如表 所示。
| 内容 | 说明 |
|---|---|
| 18:56:38 | 系统当前时间 |
| 4小时10分钟 | 系统的运行时间.本机己经运行 |
| 2 users | 当前登录了两个用户 |
| load average: 0.00, 0.01, 0.05 | 系统在之前 1 分钟、5 分钟、15 分钟的平均负载。如果 CPU 是单核的,则这个数值超过 1 就是高负载:如果 CPU 是四核的,则这个数值超过 4 就是高负载 (这个平均负载完全是依据个人经验来进行判断的,一般认为不应该超过服务器 CPU 的核数) |
1.5.2第二段内容行为进程信息,具体内容如表
| 内容 | 说明 |
|---|---|
| Tasks: 196 total | 系统中的进程总数 |
| 2 running | 正在运行的进程数 |
| 194 sleeping | 睡眠的进程数 |
| 0 stopped | 正在停止的进程数 |
| 0 zombie | 僵尸进程数。如果不是 0,则需要手工检查僵尸进程 |
1.5.3第三段内容行为 CPU 信息,具体内容如表
| 内容 | 说明 |
|---|---|
| %Cpu(s): 0.0 us | 用户模式占用的 CPU 百分比 个人用户开启的进程占用的 cpu 率 |
| 0.0 sy | 系统模式占用的 CPU 百分比 |
| 0.0 ni | 改变过优先级的用户进程占用的 CPU 百分比 |
| 100.0 id | 空闲 CPU 占用的 CPU 百分比 |
| 0.0 wa | 等待输入/输出的进程占用的 CPU 百分比 1 |
| 0.0 hi | 硬中断请求服务占用的 CPU 百分比 |
| 0.0 si | 软中断请求服务占用的 CPU 百分比 |
| 0.0 st | st(steal time)意为虚拟程序占用 cpu 时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比 |
1.5.4第四行为物理内存信息,具体内容如表buff cache
| 内容 | 说明 |
|---|---|
| KiB Mem : 1867048 total | 物理内存的总量,单位为KB |
| 167488 free | 己经使用的物理内存数量 |
| 776952 used | 空闲的物理内存数量。我们使用的是虚拟机,共分配了 628MB内存,所以只有53MB的空闲内存 |
| 922608 buff/cache | 作为缓冲的内存数量 |
1.5.5 第五行为交换分区(swap)信息,如表
| 内容 | 说明 |
|---|---|
| KiB Swap: 2097148 total | 交换分区(虚拟内存)的总大小 |
| 2097104 free | 已经使用的交换分区的大小 |
| 44 used | 空闲交换分区的大小 |
| 866984 avail Mem | 作为缓存的交换分区的大小 |
1.6缓冲(buffer)和缓存(cache)的区别:
- 缓存(cache)是用来加速数据从硬盘中"读取"的
- 而缓冲(buffer)是用来加速数据"写入"硬盘的。
1.7在 top 命令的显示窗口中,还可以使用如下按键,进行一下交互操作:
- ? 或 h:显示交互模式的帮助;
- c:按照 CPU 的使用率排序,默认就是此选项;
- M:按照内存的使用率排序;
- N:按照 PID 排序;
- T:按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序;
- k:按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号;
- r:按照 PID 给某个进程重设优先级(Nice)值;
- q:退出 top 命令;
htop
- 增强版的top
pgrep命令
查看指定的进程
- -U 指定用户
- -l: 显示进程名
- -a: 显示完整格式的进程名
- -P pid: 显示指定进程的子进程
计算机五大性能
查看命令
1.内存:free / top
2.磁盘:df /lsblk /fdisk -l
io读写性能:dd /iostat/vmstat
3.cpu使用率:top(实时) ps(静态)
4.网络:iftop
5.系统版本:cat /etc/redhat-release
ip地址:ifconfig
内核:uname -r
三.进程管理
前台执行和后台执行
1.命令加
&放入后台
2.
jobs (列表,编号)后台执行的命令,查编号:jobs3.
fg加jobs(编号)把任务调回前台4.
ctrl +2把命令放回后台,但是停止状态5.
bg+ jobs继续任务
四.结束进程
kill : 结束
kill -9 :强行终止进程
五.计划任务 crontab管理
1.crontab 选项 ///提前规划好时间做一些任务
| 选项 | 功能 |
|---|---|
| -u user | 用来设定某个用户的 crontab 服务,例如 "-u demo" 表示设备 demo 用户的 crontab 服务,此选项一般有 root 用户来运行。 |
| -e | 编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。 |
| -l | 显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。 |
| -r | 从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件。 |
| -i | 在删除用户的 crontab 文件时,给确认提示。 |
`2.进入 crontab 编辑界面。会打开Vim编辑你的任务
`***** 执行的任务``
3.*****分别代表:分 时 日 月 周
| 项目 | 含义 | 范围 |
|---|---|---|
| 第一个"*" | 一小时当中的第几分钟(minute) | 0~59 |
| 第二个"*" | 一天当中的第几小时(hour) | 0~23 |
| 第三个"*" | 一个月当中的第几天(day) | 1~31 |
| 第四个"*" | 一年当中的第几个月(month) | 1~12 |
| 第五个"*" | 一周当中的星期几(week) | 0~7(0和7都代表星期日) |
4.时间表示中一些特殊的标志
| 特殊符号 | 含义 |
|---|---|
| *(星号) | 代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思。 |
| ,(逗号) | 代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。 |
| -(中杠) | 代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。 |
| /(正斜线) | 代表每隔多久执行一次。比如"/10***命令",代表每隔 10 分钟就执行一次命令。 |
4.实践操作
1.输入命令crontab -e编写命令,进入vim编辑
2.输入需要计划的具体时间与命令
3.保存退出并使用crontab-l查看当前的计划
4.5. -r选项可以删除当前计划