一、Linux进程与程序
1.什么是进程?什么是程序?
程序(procedure):不太精确地说,程序就是执行一系列有逻辑、有顺序结构的指令,帮我们达成某个结果。就如我们去餐馆,给服务员说我要牛肉盖浇饭,她执行了做牛肉盖浇饭这么一个程序,最后我们得到了这么一盘牛肉盖浇饭。它需要去执行,不然它就像一本武功秘籍,放在那里等人翻看。
进程(process):进程是程序在一个数据集合上的一次执行过程,在早期的 UNIX、Linux 2.4 及更早的版本中,它是系统进行资源分配和调度的独立基本单位。同上一个例子,就如我们去了餐馆,给服务员说我要牛肉盖浇饭,她执行了做牛肉盖浇饭这么一个程序,而里面做饭的是一个进程,做牛肉汤汁的是一个进程,把牛肉汤汁与饭混合在一起的是一个进程,把饭端上桌的是一个进程。它就像是我们在看武功秘籍这么一个过程,然后一个篇章一个篇章地去练。
2.Linux进程控制与检测
查看系统中运行的程序和进程
判断服务器的健康状态
停止不需要的进程
3.进程的管理命令
1)top
常用交互命令 | 解释 |
---|---|
q | 退出程序 |
I | 切换显示平均负载和启动时间的信息 |
P | 根据 CPU 使用百分比大小进行排序 |
M | 根据驻留内存大小进行排序 |
i | 忽略闲置和僵死的进程,这是一个开关式命令 |
k | 终止一个进程,系统提示输入 PID 及发送的信号值。一般终止进程用 15 信号,不能正常结束则使用 9 信号。安全模式下该命令被屏蔽。 |
第一行:
1.09:01:05 系统时间
2.up 6 min, 系统运行之间
3.3 users, 当前登录的用户
4.load average: 0.02, 0.21, 0.14 系统在之前的 1分钟 5分钟 15分钟 的平均负载 如果cpu是单核 那么这个数值超过1 就是高负载 双核就是超过2为高负载
load average 在 wikipedia 中的解释是 the system load is a measure of the amount of work that a computer system is doing 也就是对当前 CPU 工作量的度量,具体来说也就是指运行队列的平均长度,也就是等待 CPU 的平均进程数相关的一个计算值。
我们该如何看待这个 load average 数据呢?
假设我们的系统是单 CPU、单内核的,把它比喻成是一条单向的桥,把 CPU 任务比作汽车。
- load = 0 的时候意味着这个桥上并没有车,cpu 没有任何任务;
- load < 1 的时候意味着桥上的车并不多,一切都还是很流畅的,cpu 的任务并不多,资源还很充足;
- load = 1 的时候就意味着桥已经被车给占满了,没有一点空隙,cpu 已经在全力工作了,所有的资源都被用完了,当然还好,这还在能力范围之内,只是有点慢而已;
- load > 1 的时候就意味着不仅仅是桥上已经被车占满了,就连桥外都被占满了,cpu 已经在全力工作,系统资源的用完了,但是还是有大量的进程在请求,在等待。若是这个值大于 2 表示进程请求超过 CPU 工作能力的 2 倍。而若是这个值大于 5 说明系统已经在超负荷运作了。
这是单个 CPU 单核的情况,而实际生活中我们需要将得到的这个值除以我们的核数来看。我们可以通过以下的命令来查看 CPU 的个数与核心数:
#查看物理 CPU 的个数
cat /proc/cpuinfo | grep "physical id" | sort | uniq |wc -l
#每个 cpu 的核心数
cat /proc/cpuinfo | grep "physical id" | grep "0" | wc -l
第二行
1.Tasks: 212 total 系统总进程数
2.1 running 当前正在运行的进程
3.211 sleeping 已经休眠的进程
4.0 stopped 停止的进程
5.0 zombie 代表僵尸进程
第三行
1.%Cpu(s): 3.5 us 用户模式占用的cpu百分比
2.0.5 sy :系统占用
3.0.0 ni :改变过优先级的用户进程占用
4.98.3 id :空闲
5.0.2 wa:等待输入/输出进程占用
6.0.0 hi :硬中断请求服务 占用
7.0.0 si :软中断请求服务 占用
8.0.0 st :虚拟时间百分比
第四行
1.KiB Mem : 997976 total, 物理内存的总量 单位kb
2.666264 used:已经使用的物理内存总量
3.79656 free:空闲内存
4.244012 buff/cache:作为缓冲的内存数量
第五行
1.KiB Swap: 2097148 total 虚拟内存总大小
2.192512 used. 已经使用的交换分区大小
3.1904636 free 空闲
4.125120 avail Mem 可用内存
进程信息
列名 | 解释 |
---|---|
PID | 进程 id |
USER | 该进程的所属用户 |
PR | 该进程执行的优先级 priority 值 |
NI | 该进程的 nice 值 |
VIRT | 该进程任务所使用的虚拟内存的总数 |
RES | 该进程所使用的物理内存数,也称之为驻留内存数 |
SHR | 该进程共享内存的大小 |
S | 该进程进程的状态: S=sleep R=running Z=zombie |
%CPU | 该进程 CPU 的利用率 |
%MEM | 该进程内存的利用率 |
TIME+ | 该进程活跃的总时间 |
COMMAND | 该进程运行的名字 |
注意:
NICE 值叫做静态优先级,是用户空间的一个优先级值,其取值范围是 -20 至 19。这个值越小,表示进程”优先级”越高,而值越大“优先级”越低。nice 值中的 -20 到 19,中 -20 优先级最高, 0 是默认的值,而 19 优先级最低。
PR 值表示 Priority 值叫动态优先级,是进程在内核中实际的优先级值,进程优先级的取值范围是通过一个宏定义的,这个宏的名称是 MAX_PRIO
,它的值为 140。Linux 实际上实现了 140 个优先级范围,取值范围是从 0-139
,这个值越小,优先级越高。而这其中的 0-99
是实时进程的值,而 100-139
是给用户的。
其中 PR 中的 100 to 139
值部分有这么一个对应 PR = 20 + (-20 to +19)
,这里的 -20 to +19
便是 nice 值,所以说两个虽然都是优先级,而且有千丝万缕的关系,但是他们的值,他们的作用范围并不相同。
VIRT 任务所使用的虚拟内存的总数,其中包含所有的代码,数据,共享库和被换出 swap 空间的页面等所占据空间的总数。
2)free
查看内存使用情况
基本语法:
free -m 代表以Mb单位查看
第一行
total 内存总数
used 已经使用的内存数
free 空闲内存数
shared 共享内存数
buff/cache 缓冲区内存数
available 可用内存
swap 代表虚拟内存 在物理内存不够时使
df查看磁盘剩余空间
df(disk free)即磁盘剩余
df -f以较高的可读性显示磁盘剩余空间大小
4)ps
查看服务器的进程信息
1.ps -ef
-e:等价于-A
-f: full表全部
UID | 该进程执行的用户ID |
---|---|
PID | 进程ID |
PPID | 该进程的父级进程ID,如果找不到,则该进程就被称之为僵尸进程(Parent Process ID) |
C | Cpu的占用率,其形式是百分数 |
STIME | 进程的启动时间 |
TTY | 终端设备,发起该进程的设备识别符号,如果显示“?”则表示该进程并不是由终端设备发起 |
TIME | 进程实际使用CPU的时间 |
CMD | 该进程的名称或者对应的路径 |
经验之谈:我们在实际工作中使用ps命令其实主要用于查询某个进程的PID或PPID
案例:查询crond的进程信息
# ps -ef |grep crondroot 7102 1 0 Mar23 ? 00:00:04 /usr/sbin/crond -nroot 24752 12881 0 16:34 pts/2 00:00:00 grep --color=auto crond
问题:以上信息只有第一行是crond的进程,第二行,实际是管道命令发起时,grep所启动的进程,如何去掉?
# ps -ef |grep crond |grep -v "grep"root 7102 1 0 Mar23 ? 00:00:04 /usr/sbin/crond -n
grep -v 需要去除的相关信息 : 去除包含指定关键词的那一行
2.ps -aux
5.)netstat查询网络访问信息
t 表示只列出tcp协议的连接
-n 表示将地址从字母组合转化成ip地址 将协议转化成端口号来显示
-l 过滤state 列出listen 监听状态的连接
-p 显示发起连接的进程pid以及进程名称
Proto:协议 tcp udp http
Recv-Q 接收
Send-Q 发送
Local Address 本地地址
Foreign Address 远程地址
State :状态 listen 代表监听状态
PID/Program name:进程ID 进程名
6)kill
kill [信号] PID
信号编号 | 含义 |
---|---|
9 | 杀死进程,即强制结束进程。 |
15 | 正常结束进程,是 kill 命令的默认信号 |
killall
killall [信号编号] 进程名称
例如:killall crond
杀死全部关于crond的进程
进程的优先级
优先级 控制哪些进程先运行 哪些后运行
查看进程优先级 top PR NI
改变优先级
在top命令下 使用快捷键r
-20 到 19 只能NI的优先级 不能改PR
命令行修改优先级
renice
修改进程优先级
renice 优先级 进程id (PID)
二、关于debian下的软件安装
1.dpkg
dpkg 介绍
dpkg 是 Debian 软件包管理器的基础,它被伊恩·默多克创建于 1993 年。dpkg 与 RPM 十分相似,同样被用于安装、卸载和供给和 .deb 软件包相关的信息。
dpkg 本身是一个底层的工具。上层的工具,像是 APT,被用于从远程获取软件包以及处理复杂的软件包关系。"dpkg"是"Debian Package"的简写。
我们经常可以在网络上见到以deb
形式打包的软件包,就需要使用dpkg
命令来安装。
dpkg
常用参数介绍:
参数 | 说明 |
---|---|
-i | 安装指定 deb 包 |
-R | 后面加上目录名,用于安装该目录下的所有 deb 安装包 |
-r | remove,移除某个已安装的软件包 |
-I | 显示 deb 包文件的信息 |
-s | 显示已安装软件的信息 |
-S | 搜索已安装的软件包 |
-L | 显示已安装软件包的目录信息 |
apt安装
在debian中的shell前端软件包管理器
需要超级管理员权限 root
首先我们要换源,详情请参考day1
apt-get install 软件名
apt-get remove(不删除配置文件) purge (删除配置文件)
apt-get update 将所有的包来源 进行更新
apt-get upgrade 将系统中旧版本的包升级成新的
apt-cache search 用关键字搜索包
apt-cache show 显示特定包的基本信息
apt-cache depends 列出包的依赖
apt-get clean 清理本地包占用空间
apt-get autoremove 卸载 同时卸载拿些2当时作为依赖 但现在不需要的包