本节内容
1, 进程管理
- ,ps
- ,uptime
- ,top
- ,ss -tnl------ lsof -i :22
一, 进程管理的概念
程序: 二进制文件, 静态 /bin/date,/usr/sbin/sshd
进程: 是程序运行的过程, 动态, 有生命周期及运行状态.
下图所示的是进程的生命周期:
描述如下:
父进程复制自己的地址空间 (fork [f?:k] 分叉) 创建一个新的 (子) 进程结构. 每个新进程分配一个唯一的进程 ID(PID), 满足跟踪安全性之需. PID 和父进程 ID(PPID)是子进程环境的元素, 任何进程都可以创建子进程, 所有进程都是第一个系统进程的后代.
centos5 或 6,PID 为 1 的进程是: init
centos7 PID 为 1 的进程是: systemd
进程类型:
僵尸进程: 一个进程使用 fork 创建子进程, 如果子进程退出, 而父进程并没有调用 wait 或 waitpid 获取子进程的状态信息, 那么子进程的进程描述符仍然保存在系统中. 这种进程称之为僵尸进程.
用自己的话表达: 父进程退出了, 子进程没有退出, 那么这些子进程就没有父进程来管理了, 就变成僵尸进程.
交互进程: 是由一个 shell 启动的进程. 交互进程既可以在前台运行, 也可以在后台运行;
批量处理进程: 这种进程和终端没联系, 是个进程序列;
守护进程: 在 Linux 系统启动时启动的进程, 并在后台运行;
超级守护进程: 系统启动时由一个统一的守护进程 xinet 来负责管理一些进程, 当相应请求到来时需要通过 xinet 的转接才可以唤醒被 xinet 管理的进程.
二, 进程的属性
进程 ID(PID): 是唯一的数值, 用来区分进程
进程状态: 状态分为运行 R(running), 休眠 S(sleep), 僵尸 Z(zombie)
三, 使用 ps 查看进程工具
1,ps 查看进程工具
例 1: 常用的参数:
a: 显示跟当前终端关联的所有进程
u: 基于用户的格式显示(U: 显示某用户 ID 所有的进程)
x: 显示所有进程, 不以终端机来区分
- [[email protected] ~]# ps aux
- USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
- root 1 0.0 0.4 125568 4080 ? Ss 09:04 0:05 /usr/lib/systemd/syste
- root 2 0.0 0.0 0 0 ? S 09:04 0:00 [kthreadd]
- root 3 0.0 0.0 0 0 ? S 09:04 0:00 [ksoftirqd/0]
- root 5 0.0 0.0 0 0 ? S< 09:04 0:00 [kworker/0:0H]
- root 7 0.0 0.0 0 0 ? S 09:04 0:00 [migration/0]
- root 8 0.0 0.0 0 0 ? S 09:04 0:00 [rcu_bh]
- root 9 0.0 0.0 0 0 ? R 09:04 0:01 [rcu_sched]
备注:
最后一列[xxxx] 使用方括号括起来的进程是内核态的进程. 没有括起来的是用户态进程.
2, 上面的参数输出每列含意
USER: 启动这些进程的用户
PID: 进程的 ID
%CPU: 进程占用的 CPU 百分比;
%MEM: 占用内存的百分比;
VSZ: 进程占用的虚拟内存大小(单位: KB)
RSS: 进程占用的物理内存大小(单位: KB)
STAT: 该程序目前的状态, Linux 进程有 5 种基本状态:
R : 该程序目前正在运作, 或者是可被运作;
S : 该程序目前正在睡眠当中, 但可被某些讯号(signal) 唤醒.
T : 该程序目前正在侦测或者是停止了;
Z : 该程序应该已经终止, 但是其父程序却无法正常的终止他, 造成 zombie (疆尸) 程序的状态
D : 不可中断状态.
5 个基本状态后, 还可以加一些字母, 比如: Ss,R + 等, 它们含意如下:
<: 表示进程运行在高优先级上
N: 表示进程运行在低优先级上
L: 表示进程有页面锁定在内存中
s: 表示进程是控制进程
l: 表示进程是多线程的
+: 表示当前进程运行在前台
START: 该 process 被触发启动的时间;
TIME : 该 process 实际使用 CPU 运作的时间.
COMMAND: 该程序的实际指令
四, uptime 查看系统负载
[[email protected]yz ~]# uptime
18:33:55 up 9:29, 1 user, load average: 0.00, 0.01, 0.05
弹出消息含意如下:
当前时间 系统运行时间 当前登录用户 系统负载 1 分钟, 5 分钟, 15 分钟的平均负载
那么什么是系统平均负载呢? 系统平均负载是指在特定时间间隔内运行队列中的平均进程数.
如果每个 CPU 内核的当前活动进程数不大于 3 的话, 那么系统的性能是良好的. 如果每个 CPU 内核的任务数大于 5, 那么这台机器的性能有严重问题.
如果你的 Linux 主机是 1 个双核 CPU 的话, 当 Load Average 为 6 的时候说明机器已经被充分使用了.
五, top 命令
top - 18:36:39 up 9:31, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 160 total, 2 running, 158 sleeping, 0 stopped, 0 zombie
- %CPU(s): 0.3 us, 0.7 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
- KiB Mem : 995896 total, 75692 free, 392760 used, 527444 buff/cache
- KiB Swap: 2097148 total, 2097148 free, 0 used. 349284 avail Mem
- PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
- 1 root 20 0 125568 4080 2612 S 0.0 0.4 0:05.21 systemd
- 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
- 3 root 20 0 0 0 0 S 0.0 0.0 0:00.75 ksoftirqd/0
- 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
- 7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
- 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
- 9 root 20 0 0 0 0 R 0.0 0.0 0:01.44 rcu_sched
- 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain
第 1 行: 系统时间, 运行时间, 登录终端数, 系统负载(三个数值分别为 1 分钟, 5 分钟, 15 分钟内的平均值, 数值越小意味着负载越低).
第 2 行: 进程总数, 运行中的进程数, 睡眠中的进程数, 停止的进程数, 僵死的进程数.
第 3 行: 用户占用资源百分比, 系统内核占用资源百分比, 改变过优先级的进程资源百分比, 空闲的资源百分比等. 其中数据均为 CPU 数据并以百分比格式显示, 例如 "97.1 id" 意味着有 97.1% 的 CPU 处理器资源处于空闲.
第 4 行: 物理内存总量, 内存使用量, 内存空闲量, 作为内核缓存的内存量.
第 5 行: 虚拟内存总量, 虚拟内存使用量, 虚拟内存空闲量, 已被提前加载的内存量.
第 6 行:
PID - 进程 id
USER - 进程所有者
PR - 进程优先级
NI - nice 值. 负值表示高优先级, 正值表示低优先级
VIRT - 进程使用的虚拟内存总量, 单位 kb.VIRT=SWAP+RES
RES - 进程使用的, 未被换出的物理内存大小, 单位 kb.RES=CODE+DATA
SHR - 共享内存大小, 单位 kb
S - 进程状态. D = 不可中断的睡眠状态 R = 运行 S = 睡眠 T = 跟踪 / 停止 Z = 僵尸进程
%CPU - 上次更新到现在的 CPU 时间占用百分比
%MEM - 进程使用的物理内存百分比
TIME+ - 进程使用的 CPU 时间总计, 单位 1/100 秒
COMMAND - 进程名称(命令名 / 命令行)
六, lsof 命令
lsof 命令用于查看你进程打开的文件, 打开文件的进程, 进程打开的端口(TCP,UDP)
-i < 条件>: 列出符合条件的进程.(4,6, 协议,: 端口, @ip )
- [[email protected] ~]# ss -tnl #lsof 配合 ss 命令使用
- State Recv-Q Send-Q Local Address:Port Peer Address:Port
- LISTEN 0 128 *:22 *:*
- LISTEN 0 128 :::22 :::*
- LISTEN 0 128 ::1:631 :::*
- LISTEN 0 100 ::1:25 :::*
- [[email protected] ~]# lsof-i :22
- COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
- sshd 6973 root 3u IPv4 44072 0t0 TCP *:SSH (LISTEN)
- sshd 6973 root 4u IPv6 44081 0t0 TCP *:SSH (LISTEN)
来源: http://www.bubuko.com/infodetail-3129291.html