Linux进阶之进程管理
本节内容
1、进程管理
2、ps
3、uptime
4、top
5、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:显示所有进程,不以终端机来区分
另一种ps查看进程的方法:ps -ef (查看内容简洁)
[root@renyz ~]# 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查看系统负载
[root@renyz ~]# 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 )
[root@renyz ~]# 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 :::*
[root@renyz ~]# 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)