1、什么是进程?
Linux系统中的几乎任何行动都会以进程的形式进行。进程就是已启动的可执行程序的运行实例,进程是系统中正在运行的一个程序,程序一旦运行就是一个进程,进程有以下组成部分:
1.已分配内存的地址空间;
2.安全属性,包括所有权凭据和特权;
3.程序代码的一个或多个执行线程;
4.进程状态;
2、进程的属性
- 进程ID(PID):是唯一的数值,用来区分进程;
- 父进程的ID(PPID);
- 启动进程的用户ID(UID)和所属的组ID(GID);
- 进程状态:分别是R(运行)、S(休眠)、Z(僵尸);
- 进程执行的优先级;
- 进程所连接的终端名;
- 进程资源占用:比如占用CPU、内存的大小;
3.进程的查看
- 使用ps命令查看进程:
1.常用的参数:
a:显示跟当前终端关联的所有进程
u:基于用户的格式显示(U:显示某用户ID所有的进程)
x:显示所有进程,不以终端机来区分
以上参数详解①:
USER: 此进程有效用户;
PID:进程ID;注:在Centos5/6中PID为1的进程是init;在Centos7中则是systemd
%CPU:占用CPU的百分比;
%MEM:占用内存的百分比;
VSZ:占用虚拟内存;
RSS:占用常驻内存大小;
TTY:表明线程在哪个终端上运行,如果显示?表示与终端无关的进程,这种一般为内核态进程。另外tty1到tty6是本机上面的登入者程序,若为pts/0等,则表示运行在虚拟终端上的进程;
STAT:该进程目前的状态。Linux进程有5种基本状态:
R:程序正在运行或者可被运行
S:可中断的睡眠
T:停止状态
Z:僵尸进程(程序已经终止,但是父进程却无法正常地终止它)
D:不可中断的睡眠
5个基本状态后,还显示一些字母或者符号,如上图②中的所示,它们的含义如下:
<:表示高优先级的进程
N:低优先级的进程
s:系统控制进程(会话进程的领导者)
l:多线程进程
+:进程运行在前台
START:该process被触发启动的时间。
TIME:该process实际使用CPU运作的时间。
COMMAND:该程序的实际指令。带[]的为内核态线程,不带[]的则为用户态。
例1:查看进程状态
在另一个终端上执行:
在vim test.txt这个终端上按下Ctrl+z
在另一个终端上执行:
注:
Ctrl+z 是发送SIGTOP信号,挂起一个进程。将作业放置到后台(暂停)
Ctrl+c 是发送SIGINT信号,终止一个进程。
Ctrl+d 不是发送信号,而是表示一个特殊的二进制值。
2.ps常用的参数:
-e 显示所有进程
-f 显示完整格式输出
我们常用的组合: ps -ef
ps -ef这个命令中的参数跟上面差不多一个意思,只不过ps aux 是用BSD的格式来显示进程,而ps -ef 是用标准的格式显示进程,其中:
UID:启动这些进程的用户
PPID:父进程的进程号
C:进程生命周期中的CPU利用率
- 使用uptime命令查看系统负载
弹出的消息含义如下:
22:38:34 | 当前时间 |
---|---|
up 3 days,9:24 | 系统运行时间,说明服务器连续运行3天了 |
load average:0.00,0.01,0.05 | 系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5 分钟、15分钟前到现在的平均值。 |
4 users | 当前登录用户数 |
CPU和内存类
-
top命令
可以看到top命令第一行弹出的内容和uptime命令弹出的消息一样,以下是参数详解:(当有多个CPU时这些内容可能会超过两行(按1查看))asks:97 total: 进程总数 running: 正在运行的进程数 sleeping: 睡眠的进程数 stopped: 停止的进程数 zombie: 僵尸进程数 Cpu(s): 1.3 us: 系统用户进程使用CPU百分比 sy: 内核中的进程占用CPU百分比 ni: 用户进程空间内改变过优先级的进程占用CPU百分比 id : 空闲CPU百分比 wa: CPU等待I/O完成的时间总量 hi: 硬件中断时间 si: 软件中断时间,占用率过高的时候,很可能某些外设出现问题,导致产生大量的irq请求,这时候通过检查 /proc/interrupts 文件来深究问题所在; st: 被偷走的时间,在虚拟机情况下才有意义,因为虚拟机下 CPU 也是共享物理 CPU 的,所以这段时间表明虚拟机等待 hypervisor 调度 CPU 的时间,也意味着这段时间 hypervisor 将 CPU 调度给别的 CPU 执行,这个时段的 CPU 资源被“stolen”了 Mem:1014864 total: 物理内存总量,total = free + used + buff/cache free 空闲内存量 used 已使用的内存量 buff/cache 用作内核缓存的内存量。和free -k 一个意思 Swap 交换区总量 avail Mem 总的可利用内存量 注:如果swap分区被使用,那么表示你的内存有点紧张哦!
名称 含义 PR 优先级 NI 进程优先级。也就是nice值,负值表示高优先级,正直表示低优先级。 VIRT 虚拟内存。 RES 常驻内存,是进程使用的物理内存,实际使用的内存。 SHR 共享内存大小,单位是kb,计算某个进程所占的物理内存大小:RES-SHR -
top快捷键:
M:根据驻留内存大小进行排序 P:根据CPU使用百分比进行排序 T:根据累计时间进行排序 l:是否显示平均负载和启动时间 t:是否显示进程和CPU状态相关信息 m:是否显示内存相关信息 c:是否显示完整的命令信息 q:退出top k:终止某个进程 数字1:显示每个内核的CPU使用率 u/U:指定显示的用户
网络类
- netstat命令
显示自系统启动以来各个协议的总体数据信息。通常用来检测端口和连接信息。
netstat -antup # 显示所有TCP连接
netstat -lntp #列出本地所有TCP监听套接字,不推荐跟-a参数一起使用
- sar
该命令主要用于收集、报告或保存系统的活动信息,CPU、磁盘、页面交换有关都管。
sar -n TCP,UDP 1 1 # 统计网络信息
- tcpdump
tcpdump是linux上的抓包命令,类似win中的wireshark。使用 tcpdump 进行抓包,当问题复现(比如日志显示或者某个状态显现)的时候,就可以结束抓包了,而且 tcpdump 本身带有 -C/-W 参数,可以限制抓取包存储文件的大小,当达到这个这个限制的时候保存的包数据自动 rotate,所以抓包数量总体还是可控的。此后将数据包拿下线来,用 wireshark 想怎么看就怎么看,岂不乐哉!tcpdump 虽然没有 GUI 界面,但是抓包的功能丝毫不弱,可以指定网卡、主机、端口、协议等各项过滤参数,抓下来的包完整又带有时间戳,所以线上程序的数据包分析也可以这么简单。
- kill 命令关闭进程
使用kill -l列出所有支持的信号
关闭进程三个命令:kill、killall、pkill,用法:
kill 进程号 —>关闭单个进程
killall 通过进程名终止进程
-w #等待所有被终止的进程死去,如果进程停留在僵死状态,那么killall可能会永久等待
-u #终止指定用户的进程
pkill 通过进程名终止指定的进程,可杀死指定进程及子进程
-t #杀死指定终端的进程
-u #杀死指定用户的进程
我们常用的信号有:
1) SIGHUP 重新加载配置
2) SIGINT 键盘中断 crtl+c
3) SIGQUIT 退出
9) SIGKILL 强制终止
15) SIGTERM 终止(正常结束),缺省信号
18) SIGCONT 继续
19) SIGSTOP 停止
20) SIGTSTP 暂停 crtl+z