进程和计划任务管理
1.进程管理
进程:相当于任务管理器,程序是一串没有运行的代码,进程是运行起来的代码
线程:相当于复制了进程的部分代码,程序运行起来之后,真正执行的是线程
linux系统当中启动程序的过程
启动的过程
父进程先启动—子进程
子进程的资源由父进程来进行分配
结束的过程:
子进程先结束—父进程收回子进程的资源—父进程才会终止
特殊情况:
父进程结束了,子进程还在,便是僵尸进程.
2.linux查看进程信息
1.静态查看
ps—静态查看进程信息
方法1: ps -aux
-a显示终端上的所有进程,包括其他用户的进程
-u列出进程的执行用户
-x显示当前终端进程的详细!信息
USER:进程的用户
PID:进程号,每个进程在系统中运行时的唯一标志,每个pid都是不重复的*
%CPU:进程占用CPU的百分比*
%MEM:进程占用物理内存的百分比*
VSZ:进程使用的虚拟内存大小(kb)
RSS:占用物理内存的量(kb)
TTY:表示终端,每连接主机一个新窗口都是终端,?表示该进程不是有终端启动的
STAT:status状态,进程的状态()*
S:处于休眠状态,但是随时可唤醒
D:不可中断的休眠状态
R:运行
T:停止状态,后台进程暂停了,或者进程处于跟踪调试状态
Z:僵尸进程,父进程结束了,但是子进程还在
补充说明后面字符的含义:
s:该进程包含子进程
<:该进程的优先级高,会被cpu优先处理
N:低优先级
l:该进程有多个线程
L:该进程有一部分被锁进了内存
+:进程位于前台运行
TIME:进程实际使用cpu运行的时间*
COMMAND:进程启动的命令
ps -aux 主要用来显示进程占用系统资源的情况
方法2: ps-elf
ps -elf也是查看进程信息的方法
-e 显示系统内的所有进程
-l 显示进程的详细信息
-f 完整的格式展示进程的信息
F:内核分配给进程的系统表示
S:进程的状态
UID:该进程的用户
PID:该进程的进程号
PPID:该进程的父进程,谁启动的这个进程
c: 进程在生命周期当中的cpu利用率
PRI:优先级,数字越大,优先级越低
NI:谦让值
ADDR:表示进程在内存当中的地址
SZ:假如该进程被换出,需要交换的空间大小.
WCHAN:如果进程处于休眠状态,显示睡眠中的系统函数名
STIME:进程名启动的时候
TIME:进程实际使用cpu运行的时间
CMD:进程启动的详细命令
进程管理:
kill 结束进程的命令
kill -9 强制结束该进程
面试题:kill进程是谁来执行
kill只是传递了一个信号,-9表示强制和立即,是系统来执行的
特殊的进程:僵尸进程
面试题:如果有大量的僵尸进程你改怎么办
1.少量的僵尸进程影响不大,因为僵尸进程所占的系统资源很少,可以忽略不计.
2.如果僵尸进程太多了,kill -9杀不掉,僵尸进程没有办法通过kill强制结束,只能重启
2.动态查看
top 获取动态信息
top - 11:02:04 系统时间
up 10 min, 系统运行的时常
1 user, 当前登录系统的用户
load average: 0.00, 0.05, 0.07 系统的负载0.00(1分钟内处理的),0.05(5分钟内处理的),0.07(15分钟内处理的)
Tasks: 217 total, 1 running, 216 sleeping, 0 stopped, 0 zombie 系统总共有多少个进程,运行的进程数,休眠的进程数,中止的进程数,僵尸进程数
%Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st cpu信息,us是表示系统用户占用cpu的百分比,sy是内核处理占用cpu的百分比,ni是优先级调度占用cpu的百分比,id是系统空闲的cpu百分比(主要看id),wa是磁盘的读写性能,hi是1分钟之内cpu的使用率,si是5分钟之内cpu的使用率,st是15分钟内cpu的使用率
KiB Mem : 3861508 total, 2961484 free, 450760 used, 449264 buff/cache
KiB Swap: 4063228 total, 4063228 free, 0 used. 3096072 avail Mem
上两行是free -h展示的信心
小命令:
数字1:显示cpu的个数和状态
c键:根据cpu占用量的百分比大小,从大到小排列
q键:退出top
top -b -n 1:运行一次后退出相当于ps指令静态查看了了,一般不用,脚本可能用
进程信息区各列的作用:
PID:进程号
USER:进程的用户
PR:优先级
NI:谦让值
VIRT:进程使用的虚拟内存kb
RES:进程使用的物理内存
SHR:共享内存的大小
S:进程的状态
%CPU:进程占用cpu的百分比
%MEN:进程占用物理内存的百分比
TIME+:进程使用cpu的时间踪迹1/100秒
COMMAND:进程启动的命令
要根据进程的名称来找到pid,反之亦然
3.运维的指标
五大负载
cpu负载:监控cpu的使用率,工具:top,htop,了解cpu是否过载,cpu占用了85%需要注意了,90告警
内存负载:监控内存 free,top,内存占用比一般是90%告警需要处理,优化:关闭不需要的服务,释放缓存(echo 1 > /proc/sys/vm/drop_caches)
硬盘负载:iostat查看,i/o磁盘读写性能
网络负载:带宽的利用率,流量的使用情况
进程负载:监控进程使用资源的情况,iftop动态查看,ifconfig静态看
命令:
pgrep -a nginx
pgrep 查看进程id,一般配合kill一起使用
-a 显示进程名和pid号
-c 仅显示进程的数量,不显示其他内容
-f 匹配进程名及其参数
jobs 列出位于后台进程的状态信息
jobs -l 列出所有后台进程的pid号
jobs -p 列出所有后台进程进程组pid,只有pid
jobs -n 仅显示最近的后台进程
jobs -r 仅显示正在运行的后台进程
jobs -s 仅显示已停止的后台进程
如何把运行的程序调度到后台*
在命令行的结尾加一个&符号,就是把进程调度到后台运行.
fg % [1]可以把后台的任务调度到前台
2.计划任务
1. * * * * *
第一个*:分(0-59)
第二个*:(0-23)时
第三个*:日(1-31)
第三个*:月(1-12)
第四个*:周(0-7,0和7都表示周日)
后面跟的一般是可执行脚本
* 表示该范围内的任意时间,用","表示间隔,多个不连续的时间点
- 表示连续的时间范围
2-10 * * * * ls
/ 表示间隔的频率
*/5 * * * * ls
每天早上的8点30分执行一次ls: 30 8 * * * ls
每天的13-16点30分,执行一次ls: 30 13-16 * * * ls
每个月中,每隔10天的早上6点30分执行一次ls 30 6 */10 * * ls
每周三的下午的17点的30-35分钟执行ls 30-35 17 * * 3 ls
定时任务是在后台执行的
2. Crontab
crontab -e 创建定时任务,默认当前用户执行
-e -u 用户名 指定用户的定时任务
crontab -l 用户名 查看定时任务
crontab -l -u 用户名 展示指定用的定时任务
crontab -r 定时任务全部清空
crontab -e 进去之后,要删哪个删哪个
的30-35分钟执行ls 30-35 17 * * 3 ls
定时任务是在后台执行的
2. Crontab
crontab -e 创建定时任务,默认当前用户执行
-e -u 用户名 指定用户的定时任务
crontab -l 用户名 查看定时任务
crontab -l -u 用户名 展示指定用的定时任务
crontab -r 定时任务全部清空
crontab -e 进去之后,要删哪个删哪个