- 程序:没有运行的代码
- 进程:运行起来的代码就是程序
- 线程:程序的副本,把进程复制了一部分,复制了进程的部分代码,需要运行的代码由线程来完成。
linux系统上如何查看进程的信息
静态
ps 查看静态的进程信息
ps -aux
-a:all显示当前终端上所有的进程,包括其他用户的进程
-u:user列出该进程所属的用户
-x:显示进程的详细信息
root@du:~# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 1.4 0.3 168408 13400 ? Ss 09:53 0:05 /sbin/init splash
user:进程所属的用户
pid:进程的pid号,进程号,每个程度的进程都是唯一的,不重复,也是进程在系统中的唯一身份标识。
%CPU:进程占用系统cpu的百分比
%MEM:进程占用系统内存的百分比
VSZ:该进程占用虚拟内存的量,单位是kb,虚拟内存就是内存中的一部分,用来缓解物理内存不足时候临时顶替,缓解系统的压力
RSS:占用物理内存的量是多少,单位是kb
tty:启动进程的终端名,不是从终端启动的显示为?
STAT:进程的状态
S:休眠状态,运行完毕之后进入待机时间,需要被运行会立刻唤醒
R:RUNNing 进程正在运行
T:进程处于停止状态
D:不可中断的休眠状态
Z:僵尸进程,父进程已终止,但是子进程还在运行。
I:表示进程处于空闲状态idle(空闲)
s:表明该进程有子进程
<:该进程执行的优先级更高
N:该进程执行的优先级较低
l:子进程当中的线程
+:进程在前台运行
START:进程被触发启动的时间
TIME:进程实际使用cpu的时间
command:进程的启动命令
ps -elf
-e:显示系统内所有的进程信息
-l:详细的展示进程的信息
-f:完整的格式展示进程的信息
root@du:~# ps -elf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 42102 ep_pol 09:53 ? 00:00:05 /sbin/init splash
F:内核分配给进程的系统标记
S:进程的状态
UID:进程的用户
PID:进程在系统中的id号
PPID:显示该进程的父进程号
C:进程在生命周期中cpu的利用率
PRI:进程的优先级,数字越大,优先级越低
NI:谦让值,用来参与决定优先级
ADDR:进程在内存当中的地址
SZ:进程占用交换空间的大小
WCHAN:进程如果处于休眠状态,与显示睡眠中的系统函数名
STIME:进程启动时的系统时间
TTY:进程启动的终端
TIME:进程累计使用cpu的时间
CMD:进程的启动命令
ps总结
ps -aux:进程占用的系统资源的情况
ps-elf:进程在系统中的详细信息
kill命令
怎么查看一个进程在系统中的资源占用情况,以及占用çpu/内存过高,处理的方法?
- ps -aux 定位找到这个进程----->pid号
- ps -elf|grep id号 查询他的详细信息
- 根据情况来进行处理(处理之前要请示,通告)
- kill -9 pid号
-9 强制杀死
kill只是给内核发送信息,-9就是信号的详细信息,执行操作的是内核不是命令
僵尸进程该如何处理?
僵尸进程占用系统的资源很小,完全可以忽略不计
root@du:~# apt -y install gcc
root@du:~# vim wait.c #创建一个僵尸的脚本#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>int main(int argc, char **argv)
{pid_t pid;pid = fork();if (pid == 0) { // childprintf("child pid = %d\n", getpid());printf("in child...\r\n");sleep(2);} else if (pid > 0) { // fathersleep(30); /* 子进程 2s 钟后提前结束,等待父进程回收其资源,在这期间,子进程处于僵尸状态 */wait(NULL);}return 0;
}root@du:~# gcc wait.c -o wait.out #编译
root@du:~# ./wait.out
child pid = 2340
in child...
root@du:~# ps -elf|grep 2340
1 Z root 2340 2339 0 80 0 - 0 - 10:53 pts/0 00:00:00 [wait.out] <defunct>
0 S root 2342 2312 0 80 0 - 3048 pipe_r 10:53 pts/1 00:00:00 grep --color=auto 2340
root@du:~# kill -9 2340
root@du:~# ps -elf|grep 2340
1 Z root 2340 2339 0 80 0 - 0 - 10:53 pts/0 00:00:00 [wait.out] <defunct>
0 S root 2345 2312 0 80 0 - 3048 pipe_r 10:54 pts/1 00:00:00 grep --color=auto 2340
僵尸无法使用kill杀死,强制也不行
只能重启
动态
top 动态查看系统进程的命令
root@du:~# top
top - 14:45:31 up 4:51, 2 users, load average: 0.00, 0.00, 0.05
任务: 292 total, 1 running, 291 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.3 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 3868.6 total, 2079.0 free, 623.9 used, 1165.6 buff/cache
MiB Swap: 3898.0 total, 3898.0 free, 0.0 used. 2994.4 avail Mem进程号 USER PR NI VIRT RES SHR %CPU %MEM TIME+ COMMAN
数字键1: 显示所有的cpu的状态
q:退出动态展示
top -b -n 1 # 运行一次即退出,相当于静态展示top命令
第一行
top - 14:45:31 up 4:51, 2 users, load average: 0.00, 0.00, 0.05
14.45.31 系统时间
up 4:51 系统已经运行了多久
2 users 当前登录系统的用户
load average:系统的平均载荷,单位时间系统处理的任务数
1分钟 5分钟 15分钟内系统处理任务数的平均值
第二行
任务: 292 total, 1 running, 291 sleeping, 0 stopped, 0 zombie
当前系统一共有292个进程
runing 运行
stopped 终止的进程
zombie 系统的僵尸进程数
第三行
系统cpu的使用情况
%Cpu(s): 0.2 us, 0.3 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
us :用户占用cpu的百分比
sy :内核占用cpu
ni::优先级调度占用cpu的百分比
id:系统空闲的cpu百分比
wa:磁盘读写性能
hi:1分钟内系统进程占用cpu的百分比
si:5分钟内系统进程占用cpu的百分比
st:15分钟内系统进程占用cpu的百分比
进程
MiB Mem : 3868.6 total, 2079.0 free, 623.9 used, 1165.6 buff/cache
MiB Swap: 3898.0 total, 3898.0 free, 0.0 used. 2994.4 avail Mem 进程号 USER PR NI VIRT RES SHR %CPU %MEM TIME+ COMMAND
进程号 PID号
user:进行的用户名
PR:进程执行的优先级
NI:谦让值
VIRT:进程使用虚拟内存的总量 单位KB
RES: 系统使用物理内存的大小 单位KB
SHR:进程共享内存的大小,单位kb
%CPU:进程占用cpu的百分比
%MEM:进程占用内存的百分比
TIME+:进程占用cpu的总时间
COMMAND:进程的命令,启动命令
系统五大负载指标
1. cpu
监控cpu的指标 top htop
2. 内存
监控内存: free top
echo 1 > /proc/sys/vm/
drop_caches #清理内存的缓存
3. 磁盘负载
磁盘的I/O
iostat
4. 网络负载
监控网络贷款
优化网络传输
ifconfig iftop
5. 进程负载
查看系统进程占用cpu,内存,磁盘,网络来进行监控
top
ps -aux
pgrep
根据进程的名称查找进程id
- -a 显示进程的详细信息和pid号
- -c仅显示进程的数量
- -f匹配进程名和相关的参数
pgrep一般都是和kill结合使用
jobs
用于列出后台运行的进程信息
- -l:显示所有后台进程pid
- &:在命令的结尾加上一个&符号,进程就会在后台运行,关闭终端不影响进程的运行。
- -n:仅显示最近的后台进程
- -r:仅显示正在运行的后台进程
- -s:仅显示已停止的后台进程
pstree
查看进程所属的线程
- -u:显示线程的用户
- -p:显示线程的pid号
crontab定时任务
命令
* * * * *
项目 | 含义 | 范围 |
---|---|---|
第一个“*” | 一小时当中的第几分钟(minute) | 0~59 |
第二个“*” | 一天当中的第几小时(hour) | 0~23 |
第三个“*” | 一个月当中的第几天(day) | 1~31 |
第四个“*” | 一年当中的第几个月(month) | 1~12 |
第五个“*” | 一周当中的星期几(week) | 0~7(0和7都代表星期日) |
crontab -e 创建定时任务 -u
crontab -l -u 用户名 查看用户的定时任务
crontab -r 清空所有定时任务
特殊符号 | 含义 |
---|---|
*(星号) | 代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思。 |
,(逗号) | 代表不连续的时间。比如0 8,12,16 * * *命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执 行一次命令。 |
-(中杠) | 代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。 |
/(正斜 线) | 代表每隔多久执行一次。比如"*/10命令",代表每隔 10 分钟就执行一次命令。 |
crontab练习
#每天早上的8点30分执行一次任务
30 8 * * *
#每年的9月15号晚上的8点30分执行
30 20 15 9 *
#每个月的第三天的执行一次任务
0 3 * * *
#每3个月的早上9点整,执行一次任务
0 9 1 */3 *