进程和计划任务管理
一.查看进程
1.程序和进程的关系
程序与进程的区别
程序是数据和指令的集合,是一个静态的概念,就是一堆代码可以长时间的保存在系统中。
进程是程序的运行过程,是一个动态的概念,进程存在着生命周期,也就是说进程会随着程序的终止而销毁,不会永久存在系统中。
2.进程和线程关系
①什么是进程
当我们运行一个程序,那么我们将运行的程序叫进程
重点
进程是申请一块内存空间,将数据放到内存空间中去,是申请数据的过程,是最小的资源管理单元。
进程是线程的容器。
②什么是线程
线程是操作系统能够进行运算调度的最小单位
它被包含在进程之中,是进程中的实际运作单位。
一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
重点
是进程的一条流水线,只用来执行程序,而不涉及到申请资源,是程序的实际执行者最小的的执行单元。
③进程和线程关系
进程是线程的容器
④总结
进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程——资源分配的最小单位。
线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。线程——程序执行的最小单位。
进程要分配一大部分的内存,而线程只需要分配一部分栈就可以了.
一个程序至少有一个进程,一个进程至少有一个线程.
一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行.
二.查看进程信息
1.查看静态进程信息
①ps -elf
选项 | 说明 |
---|---|
-e | 显示系统内的所有进程的信息 |
-l | 使用长格式显示进程信息 |
-f | 使用完整的格式显示进程信息 |
-a | 显示现行终端下的所有进程 |
-T | 查看线程信息 |
ps -aT #显示所有线程
ps -T -p<PID> #查看指定进程中已经起的线程
ps -L <PID> #查看指定进程中的线程信息
各个字段含义
字段 | 含义 |
---|---|
F | 内核分配给进程的系统标记 |
S | 进程的状态 |
UID | 启动这些进程的的用户 |
PID | 进程的进程ID |
PPID | 父进程的进程号(如果该进程是由另一个进程启动的) |
C | 进程生命周期中的CPU利用率 |
PRI | 进程的优先级(越大的数字代表越低的优先级) |
NI | 谦让度值原来参与决定优先级 |
ADDR | 进程的内存地址 |
SZ | 假如进程被换出,所需交换空间的大致大小 |
WCHAN | 若该进程在睡眠,则显示睡眠中的系统函数名 |
STIME | 进程启动时的系统时间 |
TTY | 进程启动时的终端设备 |
TIME | 运行进程需要的的累计CPU时间 |
CMD | 进程的启动命令 |
②ps -aux
选项 | 含义 |
---|---|
a | 显示终端上的所有进程,包括其他用户的进程 |
u | 表示列出进程的用户 |
x | 显示所有终端的进程 |
各字段含义
字段 | 含义 |
---|---|
USER | 进程的用户 |
PID | 进程的ID |
%CPU | 进程占用CPU的百分比 |
%MEN | 占用内存的百分比 |
VSZ | 该进程使用的虚拟内存量(KB) |
RSS | 该进程占用的物理内存量(KB) |
TTY | 启动进程的终端名。不是从终端启动的进程则显示为? |
STAT | 该进程的状态(D:不可中断的休眠状态 R:正在运行状态 s:处于休眠状态 ,可被唤醒。 T:停止状态,可能是在后台暂停或进程处于跟踪调试状态 z:僵尸进程,进程已经中止但是部分程序还在内存当中) |
STATE | 该进程被触发的启动时间 |
TIME | 该进程实际使用CPU运行的时间 |
COMAND | 进程的启动命令 |
按CPU降序排列,-为降序,+为升序,p与%同义
ps aux --sort -%cpu |head -10
按内存升序排列
ps aux --sort +pmem |head -10
按cpu降序排列的同时按内存升序排列
ps aux --sort -pcpu,+pmem |head -10
2.查看动态进程信息
①top(查看动态进程排名信息)
各行的含义
第一行是任务队列信息
系统时间
系统已运行时长
当前登录用户数
系统负载,即单位时间内系统处理的任务数,后面三个数值分别为1分钟,5分钟,15分钟前到现在的平均值(平均值低于70%为正常,高于80%为异常)
第二行
总进程数 Tasks
正在运行的进程数 running
休眠的进程数 sleeping
中止的进程数 stopped
僵死的进程数 zombie
第三行为CPU的信息
用户占用 us
内核占用 sy
优先级调度占用 ni
空闲CPU,要了解空闲CPU的 百分比,主要看%id部分 id
I/O等待占用 wa
硬件中断占用 hi
软件中断占用 si
虚拟化占用 st
第四行为内存信息
总内存空间 total
空闲内存 free
已用内存 used
物理内存和交换内存的缓冲区总和 buff/cache
第五行为虚拟内存信息
总内存空间 total
空闲内存 free
已用内存 used
可用物理空间 avail Mem
top -H [-p <PID>] #查看线程信息
top命令
选项 | 作用 |
---|---|
P键 | 根据CPU使用百分比大小进行排序 |
M | 根据驻留内存大小进行排序 |
N键 | 根据启动时间进行排序 |
c键 | 切换显示命令名称和完整命令行 |
h键 | 可以获得top程序的在线帮助信息 |
q键 | 退出top程序 |
数字1键 | 显示CPU个数和状态 |
k键 | 根据pid号终止对应的进程 |
查看相关配置的操作命令
配置 | 操作命令 |
---|---|
内存 | free [-m] vmstat atop |
CPU | top vmstat atop sar |
IO | iostat iotop vmstat atop sar |
网卡流量 | ifconfig iftop atop |
磁盘使用 | df du atop |
进程 | ps top htop atop pidstat |
②pgrep(根据特定条件查询进程PID信息)
选项 | 说明 |
---|---|
-l | 显示进程名 |
-U | 指定特定用户 |
-t | 指定终端 |
③pstree(以树形结构列出进程信息)
选项 | 说明 |
---|---|
-a | 显示出完整信息 |
-u | 列出对应用户名 |
-p | 列出对应的PID号 |
三.进程启动方式
1.手工启动
①前台启动
用户输入命令,直接执行程序
②后台启动
在命令行尾加入“&”符号
2.进程的前后台调度
①ctrl+Z组合键
将当前进程挂起,即调入后台并停止运行
②jobs命令
jobs [l] #查看处于后台任务的列表
③fg命令
将后台进程恢复到前台运行,可指定任务序号
四.终止进程运行
1.CTRL+C组合键
中断正在执行的命令
2.kill 、killall命令
kill杀死进程是通过发送信号杀死进程
kill一共由64个信号
kill默认使用15信号(SIGTERM):进程需要被关闭,请自行停止并退出。
kill -9(SIGKILL)进程被终止,需要立即退出,这个信号不能被捕获也不能被忽略。
kill -3(SIGQUIT)可以打印进程的各个线程的堆栈信息,kill -3 pid号 后文件的保存路径为:/proc/${pid}cwd,文件名为:antBuilderOutput.log
kill用于终止指定PID号的进程
killall用于终止指定名称的相关的所有进程
-9选项用于强制终止
3.总结
如果是让进程自己执行退出离场程序就使用kill命令,这样进程可以自己执行一些清理动作然后退出。
如果进程卡死,需要记录当时的事故现场,那么应该用kill -3 来记录事故现场的信息然后退出。
如果什么也不需要,就是要杀死一个进程,那么就是用kill-9 命令,很暴力的杀死它。
4.pkill(根据特定条件终止相应的进程)
选项 | 说明 |
---|---|
-U | 根据进程所属的用户名终止相应进程 |
-t | 根据进程所在的终端终止相应进程 |
五.计划任务管理
1.at(一次性任务)
at [HH:MM] {年-月-日} #不带年月日为当天执行
atq #查看未执行的一次性计划任务
atrm 4 #删除第4条任务
CTRL+D #提交任务
2.crontab(周期性任务)
①crontab命令
按照预先设置的时间周期(分钟,小时,日,月,星期)重复执行指定的命令操作
服务脚本名称:/etc/init.d/crond
②主要设置文件
全局配置文件,位于文件:/etc/crontab (轻易不要修改此文件)
系统默认的设置,位于目录:/etc/cron.*/
用户定义的设置,位于文件:/var/spool/cron用户名
③管理crontab计划任务
编辑计划任务
crontab -e [-u 用户名]
查看计划任务
crontab -l [-u 用户名]
删除计划任务
crontab -r [-u 用户名]
④任务配置格式
分钟 小时 日 月 星期 要执行的命令或程序脚本
时间数值的特殊表示方法
系统默认的设置,位于目录:/etc/cron.*/
用户定义的设置,位于文件:/var/spool/cron用户名
#### ③管理crontab计划任务
编辑计划任务
crontab -e [-u 用户名]
查看计划任务
crontab -l [-u 用户名]
删除计划任务