进程管理
关于进程 process =======================================================
What is a process? 什么是进程 Process states 进程状态
1.1. 什么是进程?
进程是已启动的可执行程序的运行实例,是程序运行的过程,动态的,有生命周期及运行状态。
程序: 二进制文件,静态 /bin/date, /usr/sbin/httpd,/usr/sbin/sshd, /usr/sbin/nginx
1.2 .查看进程 process
1.2.1.静态查看进程
[root@linux-server ~]# ps aux | less 参数解释: ps :process nsapashot a 只能查看系统里面运行的所有终端进程 u 显示进程拥有者 x 显示系统内所有进程 f 显示进程之间的父子关系 -------------------
[root@linux-server ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND ============================================================================ USER: #运行进程的用户 PID: #进程ID %CPU: #CPU占用率 %MEM: #内存占用率 VSZ 进程占用的虚拟内存大小 RSS 占用的物理内存大小 STAT: #进程状态 ---了解 ? 表示没有占用终端 R 运行 S 可中断睡眠 Sleep D 不可中断睡眠 T 停止的进程 Z 僵尸进程 X 死掉的进程 START: #进程的启动时间 TIME: #进程占用CPU的总时间 COMMAND: #进程文件,进程名 进程状态--了解 Sl 以线程的方式运行 Ss s进程的领导者,父进程 R+ +表示是前台的进程组 S< <优先级较高的进程 SN N优先级较低的进程
查看tty的方法:
[root@linux-server ~]# tty
? 表示这个进程开启的时候没有占用终端
查看进程(二)
[root@linux-server ~]# ps -ef 参数解释: -e 显示所有进程 -l 长格式显示 -f 完整格式
UID 用户ID PID 进程ID PPID 父进程ID C CPU占用率 STIME 开始时间 TTY 开始此进程的TTY----终端设备 TIME 此进程运行的总时间 CMD 命令名
查看单个PID
[root@linux-server ~]# yum install -y httpd #安装apache软件 [root@linux-server ~]# systemctl start httpd #启动 [root@linux-server ~]# cat /var/run/httpd/httpd.pid 1043
查看指定PID
[root@linux-server ~]# ps aux | grep sshd
root 1043 0.0 0.2 105996 4120 ? Ss 01:32 0:00 /usr/sbin/sshd -D
grep:过滤
查看端口
[root@linux-server ~]# yum install lsof #安装软件包 [root@linux-server ~]# lsof -i:80 #端口号,这能查看带端口的进程 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 64249 root 4u IPv6 1373628 0t0 TCP *:http (LISTEN) #注意:端口号只有整数,范围是从0 到65535 参数解释: FD:文件描述符,应用程序通过文件描述符识别该文件。 DEVICE:指定磁盘的名称 SIZE:文件的大小
#查网络进程和正在监听的端口 [root@linux-server ~]# netstat -lntp 参数详解: -a 显示全部的进程 -u 显示udp -n 以数字的新式显示协议名称 -t tcp -p:显示进程的名称和pid -l :只显示正在被监听的端口 参数解释: recv-Q:网络接收队列 send-Q:网路发送队列 Foreign Address:与本机端口通信的外部请求
[root@linux-server ~]# w #看已经登陆到终端的进程信息,远程登陆会有ip 地址 部分参数解释: USER –登录用户名. TTY –登录用户使用的终端名. FROM –登录用户来源的主机名或IP地址. LOGIN@ –用户登录时间. WHAT –用户当前的进程及选项/参数。
1.2.2.动态查看进程
top、htop
[root@linux-server ~]# top #动态显示信息,三秒刷新一次。
在工作中必须监控的东西 load average(平均负载)等待cpu处理的队列长度 也是个数。 1分钟 第一个数字 5分钟 第二个数字 15分钟 第三个数字 ====================== 计算cpu负载:load average的三个值: 0.10, 0.16, 0.12,分别除cpu的个数,得出的值,如果值大于1那么那时候的负载高。
top操作
[root@linux-server ~]# top
h|? 帮助
> 往下翻页
< 往上翻页
M 按内存排序
P 按cpu排序
q 退出
z 彩色显示
W 保存
=============================
PR 优先级
VIRT 进程使用的虚拟内存总量,单位kb。
RES 进程使用的、未被换出的物理内存大小,单位kb。
SHR 共享内存大小,单位kb
top - 16:26:45 up 14:54, 3 users,load average: 0.05, 0.06, 0.05
Tasks: 129 total, 2 running, 127 sleeping, 0 stopped, 0 zombie
内容 | 含义 |
---|---|
16:26:45 | 表示当前时间 |
up 14:54 | 系统远行时间,格式为时:分 |
3 users | 当前登陆用户数 |
load average: 0.05, 0.06, 0.05 | 系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值 |
129 total | 进程总数 |
2 running | 正在运行的进程数 |
127 sleeping | 睡眠的进程数 |
0 stopped | 停止的进程数 |
0 zombie | 僵尸进程数 |
%Cpu (s) : 0.2 us, 1.0 sy, 0.0 ni, 98.8 id,0.0 wa, 0.0 hi, 0.0 si, 0.0 st
内容 | 含义 |
---|---|
0.2 us | 用户空间占用CPU百分比 |
1.0 sy | 内核空间占用CPU百分比 |
0.0 ni | 用户进程空间内改变过优先级的进程占用CPU百分比 |
98.9 id | 空闲CPU百分比 |
0.0 wa | 等待输入输出的CPU时间百分比 |
0.0 hi | 硬中断(Hardware IRQ)占用CPU的百分比 |
0.0 si | 软中断(Software Interrupts)占用CPU的百分比 |
0.0 st | 用于有虚拟cpu的情况,用来指示被虚拟机偷掉的cpu时间 |
KiB Mem : 2031912 total, 1549816 free, 155372 free, 326724 buff/cache
内容 | 含义 |
---|---|
2031912 total | 物理内存总量 |
1549816 free | 使用的物理内存总量 |
155372 used | 空闲内存总量 |
326724 buff/cache | 用作内核缓存的内存量 |
KiB Swap: 2097148 total, 2097148 free, 0 used, 1674648 avail Mem
内容 | 含义 |
---|---|
2097148 total | 交换区总量 |
2097148 free | 使用的交换区总量 |
0 used | 空闲交换区总量 |
1674648 Avail Mem | 缓冲的交换区总量 |
ni: nice值
id: cpu空闲率
wa: cpu等待,等待输入/输出的进程占用的 CPU 百分比。如果使用率过高,表示硬盘该换了
进程优先级 nice
nice 值越高:表示优先级越低,例如+19,该进程容易将CPU 使用量让给其他进程。
nice 值越低:表示优先级越高,例如-20,该进程更不倾向于让出CPU。
进程控制
按pid杀死进程
kill,pkill
语法: kill 信号 PID #信号也是进程间通信的一种方式
[root@linux-server ~]# kill -l #查看所有信号
-1 HUP 重新加载进程或者重新加载配置文件,PID不变
-9 KILL 强制杀死
-15 TERM 正常杀死(这个信号可以默认不写)
-18 CONT 激活进程
-19 STOP 挂起进程
案例一
给vsftpd进程发送信号1,15 vsftpd信号测试
[root@linux-server ~]# yum install -y vsftpd #安装vsftpd [root@linux-server ~]# systemctl start vsftpd #启动 [root@linux-server ~]# ps aux | grep vsftpd root 59363 0.0 0.0 53212 576 ? Ss 16:47 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf [root@linux-server ~]# kill -1 59363 #发送重启信号,例如vsftpd的配置文件发生改变,希望重新加载
[root@linux-server ~]# ps aux | grep vsftpd root 59363 0.0 0.0 53212 748 ? Ss 16:47 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf [root@linux-server ~]# kill 59363 #正常杀死进程,信号为-15可以默认不写。我们可以使用systemctl stop vsftpd 停止服务。 [root@linux-server ~]# ps aux | grep vsftpd root 62493 0.0 0.0 112660 968 pts/0 S+ 16:51 0:00 grep --color=auto vsftpd 进程状态解释--了解: +:表示运行在前台的进程 S+:休眠状态 T+:暂停,挂起状态 s:父进程
案例二
给vsftpd进程发送信号-9, vsftpd信号测试
[root@linux-server ~]# systemctl start vsftpd [root@linux-server ~]# ps aux | grep vsftpd root 67003 0.0 0.0 53212 572 ? Ss 16:57 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf root 67089 0.0 0.0 112660 972 pts/0 S+ 16:57 0:00 grep --color=auto vsftpd [root@linux-server ~]# kill -9 67003 #强制杀死,一般用于不能正常停止的情况下 [root@linux-server ~]# ps aux | grep vsftpd root 67190 0.0 0.0 112660 972 pts/0 S+ 16:57 0:00 grep --color=auto vsftpd
案例三
使用pkill 杀死vsftpd进程
[root@linux-server ~]# systemctl start vsftpd [root@linux-server ~]# ps -aux | grep vsftpd root 73399 0.0 0.0 53212 572 ? Ss 17:05 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf root 73499 0.0 0.0 112660 968 pts/0 S+ 17:05 0:00 grep --color=auto vsftpd [root@linux-server ~]# pkill -9 vsftpd #使用pkill可以指定进程名字 [root@linux-server ~]# ps -aux | grep vsftpd root 73643 0.0 0.0 112660 968 pts/0 S+ 17:05 0:00 grep --color=auto vsftpd
###