什么是进程? 是程序在内存中的表现形式
进程是已启动的可执行程序的运行实例,是程序运行的过程, 动态的,有生命周期及运行状态。
进程和线程的区别
线程被称作轻量级进程,在进程中包含线程。进程有独立的内存空间,不同进 程间不能直接共享其他进程资源,同一个进程内的线程共享进程内存空间;相 比进程,线程切换对系统开销更小一些;进程是资源分配的最小单位,线程是 程序执行的最小单位。
静态查看进程
1 2 3 4 5 6 7
| ps aux 参数解释: ps :process nsapashot a 只能查看系统里面运行的所有终端进程 u 显示进程拥有者 x 显示系统内所有进程 f 显示进程之间的父子关系
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| [root@linux-server ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND ============================================================================ USER: #运行进程的用户 PID: #进程ID %CPU: %MEM: VSZ 进程占用的虚拟内存大小 RSS 占用的物理内存大小 ? 表示没有占用终端 STAT: #进程状态 ---了解 R 运行 S 可中断睡眠 Sleep D 不可中断睡眠 T 停止的进程 Z 僵尸进程 X 死掉的进程 START: #进程的启动时间 TIME: #进程占用CPU的总时间 COMMAND: #进程文件,进程名 # 僵尸进程表示进程已经退出,但它的父进程还没有回收子进程占用的资源。短暂的僵尸状态通常不必理会,但进程长时间处于僵尸状态,就应该注意了,可能有应用程序没有正常处理子进程的退出。
# S 可中断睡眠 Sleep----类似于挂起,等待接收socket链接或者是一些信号从而重新被唤起 # D 不可中断睡眠 --不可中断状态,表示进程正在跟硬件交互,为了保护进程数据和硬件的一致性,系统不允许其他进程或中断打断这个进程。 进程长时间处于不可中断状态,通常表示系统有 I/O 性能问题。 进程状态--了解 Sl 以线程的方式运行 Ss s进程的领导者,父进程 R+ +表示是前台的进程组 S< <优先级较高的进程 SN N优先级较低的进程
|
进程PID在1000以内的服务大多都是开机自动启动的(不完全是)!
查看单个进程的PID
1 2 3 4
| [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
1 2 3
| [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:过滤
|
查看端口
1 2 3 4
| [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)
|
1 2 3 4 5 6 7 8 9
| #查网络进程和正在监听的端口 [root@linux-server ~]# netstat -lntp (该命令对应的包名:net-tools) 参数详解: -a 显示全部的进程 -u 显示udp -n 以数字的新式显示协议名称 -t tcp -p:显示进程的名称和pid -l :只显示正在被监听的端口
|
动态查看进程
top
1
| [root@linux-server ~]# top #动态显示信息,三秒刷新一次。
|

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| 第一行,任务队列信息,同 uptime 命令的执行结果 系统时间:16:23:40 运行时间:up 1:57 当前登录用户: 3 user 在工作中必须监控的东西 load average(平均负载)等待cpu处理的队列长度 也是个数。 1分钟 第一个数字 5分钟 第二个数字 15分钟 第三个数字 计算cpu负载:load average的三个值: 0.10, 0.16, 0.12,分别除cpu的个数,得出的值,如果值大于1那么那时候的负载高。 第二行,Tasks — 任务(进程) 总进程:150 total, 运行:1 running, 休眠:149 sleeping, 停止: 0 stopped, 僵尸进程: 0 zombie 第三行,cpu状态信息 us :用户空间占用CPU的百分比 sy :内核空间占用CPU的百分比 ni :nice值 id: cpu空闲率 wa:cpu等待,等待输入/输出的进程占用的 CPU 百分比。如果使用率过高,表示硬盘该换了 hi:硬中断占用CPU的百分比 si:软中断占用CPU的百分比 第四行,内存状态 第五行,swap交换分区信息
|
top操作

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| [root@linux-server ~]# top h|? 帮助 > 往下翻页 < 往上翻页 M 按内存排序 P 按cpu排序 q 退出 z 彩色显示 W 保存 ============================= PID 进程ID USER 运行进程的用户 PR 优先级 最终优先级=初始优先级(20)+nice值 #如PID为4的PR=20+(-20)=0 NI nice值 VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES RES 进程使用的、未被换出的物理内存大小,单位kb。 SHR 共享内存大小,单位kb S 进程状态 %CPU CPU占用率 %MEM 内存占用率 TIME+ 进程占用CPU的总时间 COMMAND 进程文件,进程名
|
进程优先级 nice
1 2
| nice 值越高:表示优先级越低,例如+19,该进程容易将CPU 使用量让给其他进程。 nice 值越低:表示优先级越高,例如-20,该进程更不倾向于让出CPU。
|
进程控制
1 2 3 4 5 6 7 8 9
| kill,pkill 语法: kill 信号 PID #信号也是进程间通信的一种方式,如果杀的是子进程,子进程死后父进程会再诞生出一个子进程,与之前杀掉的PID不同 pkill 信号 进程名(服务名) #pkill可以指定进程名,一次会把该进程的父进程子进程都干掉 [root@linux-server ~]# kill -l #查看所有信号 -1 HUP 重新加载进程或者重新加载配置文件,PID不变,一般用于修改了配置文件后不关闭重启服务使其生效 -9 KILL 强制杀死 #不管你在不在处理手中工作,直接杀死 -15 TERM 正常杀死(这个信号可以默认不写)#正常杀死就是他不会立即被杀死,他会先把自己手中工作处理完 -18 CONT 激活进程 -19 STOP 挂起(暂停)进程
|
作业控制
作业控制之jobs:
作业控制指的是控制正在运行的进程的行为。比如,用户可以挂起一个进程或者放到后台去运行,等一会儿再继续执行该进程。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| [root@linux-server~]# sleep 7000 & #&:让命令或者程序后台运行 [1] 5441 [root@linux-server ~]# sleep 8000 #ctrl+z 把程序放到后台(这方法会让程序在后台暂停) ^Z [2]+ Stopped sleep 8000
[root@linux-server ~]# jobs #查看后台的工作号 [1]- Running sleep 7000 & [2]+ Stopped sleep 8000 [root@linux-server ~]# bg %2 #让暂停的程序在后台运行,%是用来修饰job number,2就是job number。(程序的工作号) [2]+ sleep 8000 & [root@linux-server ~]# jobs [1]- Running sleep 7000 & [2]+ Running sleep 8000 &
[root@linux-server ~]# fg %1 #将后台的程序调到前台 sleep 7000
[root@linux-server ~]# jobs [2]+ Running sleep 8000 & [root@linux-server ~]# kill -9 %2 #通过kill杀死进程 [root@linux-server ~]# jobs [2]+ Killed sleep 8000 [root@linux-server ~]# jobs #再次查看没有了
#注:bg、fg命令后可以省略%,直接加后台程序编号即可。但是kill -9后面的后台程序编号前必须要加%,否则不生效,会杀不死。
|
常用命令
1.查看当前CPU负载
1 2
| [root@linux-server ~]# uptime 17:35:01 up 16:02, 3 users, load average: 0.00, 0.02, 0.05
|
脚本中会常用到该命令,其实也就是top命令返回结果的第一行。但是top命令是动态的,他并不能在脚本中使用。
2.查看内存使用
1 2 3 4 5 6 7 8 9
| [root@linux-server ~]# free -m total used free shared buff/cache available Mem: 1984 154 1508 8 321 1632 Swap: 2047 0 2047
-m:单位M
echo 3 > /proc/sys/vm/drop_caches #临时清理内存,有点类似于Windows的加速球,但是在工作当中应当谨慎使用,尤其是在公司的服务器配置不是很高时。
|
3.查看系统的版本和内核
1 2 3 4 5 6
| [root@linux-server ~]# cat /etc/redhat-release #查看版本 CentOS Linux release 7.4.1708 (Core) [root@linux-server ~]# uname -a #看查正在运行的内核版本 Linux linux-server 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux [root@linux-server ~]# uname -r #查看内核版本 3.10.0-693.el7.x86_64
|
4.修改主机名
1 2 3 4 5 6 7 8
| 方法一 [root@linux-server ~]# hostnamectl set-hostname xxxx #主机名,修改完之后断开与终端连接,然后在重新连接即可。或者直接bash回车即可。但是此方法修改主机名会有许多限制,如不支持大写、特殊字符和中文,名字长度有所限制等等。 方法二 [root@linux-server ~]# vim /etc/hostname #直接在该文件中输入你想要的主机名,该方法修改主机名没有限制
查看主机名 [root@linux-server ~]# hostname
|