1)进程介绍
-
程序:存在于磁盘里的代码文件或软件(程序集合)。 [程序在磁盘里,躺平睡觉]
-
进程:运行着的程序或软件,就叫进程. [存在于内存中,正在干活工作]。
把磁盘中的程序拿出来放入内存中运行,运行的这个东西就叫进程。
-
守护进程:【持续】运行的进程. 远程连接服务sshd也是守护进程
提供给客户服务的守护进程:一般会有端口(VNC 5900,远程桌面3389,ssh22)
2)进程管理
静态查看ps (ps
命令主要用于查看某一时刻系统中的进程状态)
动态查看top (top
命令是一个实时的进程监控工具)
-
ps命令用于列出执行ps命令的那个时刻的[进程快照],就像手机给进程照了一张照片
常用:
-e 显示所有进程※
-f 额外显示UID、PPID、C与STIME栏位※
常用命令:
ps -ef (企业:简易查看过滤进程。)
[root@oldboy ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Jun02 ? 00:00:06 /usr/lib/systemd/systemd --
system --des
root 2 0 0 Jun02 ? 00:00:00 [kthreadd]
root 4 2 0 Jun02 ? 00:00:00 [kworker/0:0H]
root 6 2 0 Jun02 ? 00:00:09 [ksoftirqd/0]
root 7 2 0 Jun02 ? 00:00:00 [migration/0]
root 8 2 0 Jun02 ? 00:00:00 [rcu_bh]
PID为1的是Linux第一个初始进程,C7:systemd,C6:init 输出信息中各列的说明如下。 UID:进程被该UID所拥有,程序运行必须要有用户,一般是【虚拟用户】。 PID:进程的标识号;Process ID PPID:进程的父进程的标识号; C:CPU使用的资源百分比; STIME:进程开始的时间; TTY :该进程是在哪个终端机上面运作,若与终端机无关,则显示?, 另外, tty1-tty6是本机上面的登入者进程,若为pts/0等,则表示为由网络连接进主机的进程; TIME:进程所使用的总的CPU时间; CMD:正在执行的命令行。
非常用命令
ps -aux #BSD格式参数,使用a选项和x选项显示所有进程,使用u选项显示进程的用户信息。 -a 显示与终端相关的所有进程,包含每个进程的完整路径※ -u 显示进程的用户信息※ -x 显示与终端无关的所有进程※
[root@lan ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 0.3 128448 7124 ? Ss 14:29 0:03 /usr/lib/systemd/sy
root 2 0.0 0.0 0 0 ? S 14:29 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 14:29 0:00 [kworker/0:0H]
root 5 0.0 0.0 0 0 ? S 14:29 0:00 [kworker/u256:0]
root 6 0.0 0.0 0 0 ? S 14:29 0:00 [ksoftirqd/0]
root 7 0.0 0.0 0 0 ? S 14:29 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 14:29 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? R 14:29 0:01 [rcu_sched]
输出信息中各列的说明如下。 USER:该进程属于的用户; PID :该进程的进程号; %CPU:该进程使用掉的CPU资源百分比;* %MEM:该进程所占用的物理内存百分比;* VSZ :(Virtual Size)进程占用的虚拟内存量 (单位Kb);* RSS :该进程占用的物理内存大小 (单位Kb);* TTY :该进程是在哪个终端机上面运作的,若与终端机无关,则显示?,另外, tty1-tty6是本机上面登 入者进程,若为pts/0等,表示为由网络连接进主机进程; STAT:该进程目前的状态 START:该进程被触发启动的时间; TIME :该进程实际使用 CPU 运作的时间; COMMAND:该进程的实际命令,[ 方括号 ] 属于内核态的进程。 没有 [ ] 的是用户态进程。。 STAT:该进程目前的状态,主要的状态包括 R :正在运行,或者是可被运行。 S :正在中断睡眠中,可被某些信号(signal) 唤醒。 D :不可中断睡眠。 T :正在侦测或者是停止了。 Z :已经终止,但是其父进程无法正常终止他,造成 zombie (疆尸) 进程的状态。 + :前台进程。 l :多线程进程。 N :低优先级进程。 < :高优先级进程。 s :进程领导者。 L : 已将页面锁定到内存中。 虚拟内存:内存很小,很容易满,拿出一部分磁盘空间,当内存用,虚拟成内存。
总结:*
ps aux:查看进程占用系统资源以及进程运行状态等复杂信息时使用
a 显示与终端相关的所有进程,包含每个进程的完整路径※
u 显示进程的用户信息※
x 显示与终端无关的所有进程※
ps -ef:简单看看进程是否存在
-e 显示所有进程※
-f 额外显示UID、PPID、C与STIME栏位※
企业如何用? 查找占用cpu、mem、虚拟内存更多的进程, 分析进程的问题,解决问题,把占用资源降下来。 如果发现没有异常,还无法降下来,就增加资源。 运维人员维护服务器性能:CPU、内存、IO(磁盘) 安全人员:快速锁定异常进程。保护企业网站安全
3) pstree:显示进程状态树
安装软件包yum install psmisc -y
pstree命令以树形结构显示进程和进程之间的关系
选项说明:
语法:pstree [选项]
-a 显示启动每个进程对应的完整指令,包含启动进程的路径、参数等 ##pstree -a #显示完整进程树
-c 显示的进程中包含子进程和父进程
-h 对现在执行的程序进行特别标注
-n 根据进程PID号来排序输出,默认是以程序名称排序输出的
-p 显示进程的PID
-u 显示进程对应的用户名称
4) top:实时显示系统中各个进程的资源占用状况***
语法:top [选项] -a 将进程按照使用内存排序 -b 以批处理模式显示进程信息,输出结果可以传递给其他程序或写入到文件中。 -c 显示进程的整个命令路径,而不是只显示命令名称 -d 指定每两次屏幕信息刷新之间的时间间隔(top -d 1) -H 指定这个可以显示每个线程的情况,否则就是进程的总的状态 * -i 不显示闲置或者僵死的进程信息 -n top输出信息更新的次数,完成后将退出top命令 -p 显示指定的进程信息(top -p 进程号) *
top执行结果
top必会快捷键指令
1 #查看系统核心总数, 类似于 lscpu(CPUs)
q #退出top
M #按内存使用百分比排序输出
P #按CPU使用百分比排序输出
R #对已排序的列反转排序
###抓重点显示,有助于查看的指令。
x #高亮显示排序的列
z #以彩色信息展示
b #高亮显示处于R状态的进程
l,t,m #显示/隐藏前5行的数据输出
第一行:任务队列信息,同uptime命令的执行结果
top - 15:25:57 up 56 min, 2 users, load average: 0.00, 0.01, 0.05
15:25:57 当前系统时间 up 56 min 系统已经运行了0天0小时56分。10年不用重启 2 users 当前有2个用户登录系统 load average: 0.00, 0.01, 0.05 【检查系统是否繁忙的重要且简单的指标】 load average: 平均负载情况 0.00, 0.01, 0.05 分别代表最近1分钟、5分钟和15分钟的系统负载平均值 ##假设CPU是5核,负载达到5就是繁忙的临界点。top后,按1键显示cpu核数
第二行:Tasks为任务(进程)
Tasks: 104 total, 2 running, 102 sleeping, 0 stopped, 0 zombie
Tasks 为任务(进程) 系统现在共有104个进程,其中处于运行状态的有2个, 102个在休眠(sleep),stoped状态0个,zombie状态(僵尸)的有0个。
第三行:CPU状态信息
%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
us (user)用户空间占用CPU的百分比(如:应用程序、执行命令)。* sy (system)内核空间占用CPU的百分比(如:内核进程、硬件磁盘操作)。* ni (nice)改变过优先级的进程占用CPU的百分比。 id (idle)空闲CPU百分比,数值越大,CPU越空闲。* wa (wait)IO等待占用CPU的百分比。* hi (hard Interrupts) 硬中断(Hardware IRQ)占用CPU的百分比。 si 软中断(Software Interrupts)占用CPU的百分比。 st 虚拟机占用CPU的百分比。
第四行:内存状态
KiB Mem : 1862788 total, 1195344 free, 199936 used, 467508 buff/cache
1862788 total #内存一共多大 1195344 free #可用内存,剩余内存 199936 used #已经使用的内存 467508 buff/cache #系统缓存和缓冲占用内存空间 buffer缓冲区: 内存的空间 写入缓冲区,批量将数据写入磁盘。 cache 缓存区: 内存的空间 读取缓存区,短时间重复的数据,放到缓存区,方便快速读取
第五行:swap交换分区信息,虚拟内存
KiB Swap: 2097148 total, 2097148 free, 0 used. 1504172 avail Mem
2097148 total 交换区总量 2097148 free 空闲交换区总量 0 used 使用的交换区总量 1504172 avail Mem 可用内存大小
第七行:给出的是各进程(任务)的状态监控。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
946 root 20 0 273192 4868 3736 S 0.3 0.3 0:12.51 vmtoolsd
PID 进程id USER 进程所有者 PR 进程优先级 NI nice值,负值表示高优先级,正值表示低优先级 VIRT 进程使用的虚拟内存总量,单位kb。* RES 进程使用的、未被换出的物理内存大小,单位kb。* SHR 共享内存大小,单位kb。* S 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程。 %CPU 上次更新到现在的CPU时间占用百分比。* %MEM 进程使用的物理内存百分比。* TIME+ 进程使用的CPU时间总计,单位1/100秒。 COMMAND 进程名称(命令名/命令行)。
总结:查进程:
0.ps -ef #过滤进程
1.ps -aux #查看进程占用资源情况
2.top #动态查看进程
3.top -Hp进程号 ##查看进程运行细节
4.pstree -a ##查看进程的各种子进程
5)进程服务启动和关闭
1.进程的正常启动和关闭
启动关闭以及是否开机自启动
方式1:C7统一systemctl完全管理,包括重启系统 语法:systemctl 动作 服务名字 ##C7 systemctl list-unit-files #查看开机自启动进程情况 动作: start 启动 stop 停止 restart 重启 status 状态 #Active: active (running) 服务正在运行中 Active: inactive (dead) 服务已经停止运行 disable 禁止开机自启动 enable 设置开机自启动 服务名字:运行时候的进程名字 sshd nginx mairadb 方式2: C6 service只负责服务的启动关闭 service 服务名字 动作 ===等价/etc/init.d/服务名字 动作 ##C6及以前/kali/ubuntu
2.nginx服务进程管理实践
安装软件包
yum install nginx -y ##安装
启动nginx进程
ps -ef|grep nginx|grep -v grep ##检查进程是否启动
systemctl start nginx ##启动nginx进程
ps -ef|grep nginx|grep -v grep ##检查进程是否启动
检查端口是否开启
ss -lnt|grep 80
停止nginx服务
systemctl stop nginx ##停止nginx进程
ps -ef|grep nginx|grep -v grep ##检查进程是否停止
ss -lnt|grep 80 ##检查端口是否关闭
查看nginx服务状态
systemctl status nginx #查看nginx服务状态
● nginx.service - nginx - high performance web server Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; ## disabled服务目前被标记为 disabled,这意味着Nginx服务在系统启动时不会自动启动。 Active: inactive (dead) ##关闭状态;inactive" 表示服务没有在运行,而 "(dead)" 表示服务既没有运行也没有在启动的过程中,而是完全处于停止状态 Docs: http://nginx.org/en/docs/
设置nginx开机自启动
systemctl enable nginx #设置开机自启动
systemctl disable nginx #禁止开机自启动
chkconfig nginx on ##设置开机自启动;service方式的开机自启动
chkconfig nginx off ##禁止开机自启动;service方式
检查nginx是否开机自启动
systemctl list-unit-files|grep nginx ##方法1
systemctl status nginx|grep able ##方法2 (systemctl status nginx也可以)