目录
一、程序、进程、线程
1、程序
2、进程
3、 线程
二、查看静态的进程统计信息(ps)
三、查看动态进程统计信息 top
1、top内容介绍编辑
2、top命令
3、pgrep命令 查询进程信息
4、pstree 以树形结构列出进程信息
四、进程的启动方式
1、jobs 命令查看处于后台的任务列表
2、bg、fg、&
3、终止进程(kill、killall、pkill)
五、计划任务管理
1、一次性计划任务 at(默认当天时间)
2、周期性计划任务 crontab
1、 crontab 任务配置格式
2、crontab案例
总结
我们知道操作系统最核心的概念就是进程,进程简单来说就是在系统中运行的程序,他是操作系统资源的最小单位,但是进程是一个动态的实体,他是程序的一次执行过程,进程和程序的区别在于:进程是动态的,程序是静态的,进程是运行中的程序,二而程序是一些保存在硬盘上的可执行代码
保存在硬盘、光盘等介质中的可执行代码和数据
静态保存的代码
二进制文件
在CPU及内存中运行的程序代码
动态执行的代码
父、子进程(每个程序可以创建一个或多个进程)
有生命周期及运行状态
负责功能的运行
多线程可同时运行多个任务线程状态:
1.新建(NEW):
新创建了一个线程对象。
2.可运行(RUNNABLE):
线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu的使用权。
3.运行(RUNNING):
可运行状态(runnable)的线程获得了cpu时间片(timeslice)执行程序代码。
4.阻塞(BLOCKED):
阻塞状态是指线程因为某种原因放弃了cpu使用权,即让出了cup timeslice,暂时停止运行。直到线程进入可运行(runnable)状态,才有机会再次获得cup timeslice转到运行(running)状态。
阻塞的情况分三种
① 等待阻塞:运行的线程执行o.wait () 方法,JVM会把该线程放入等待队列(waitting queue)中。
(前面任务没有完成,到了下一个任务,而这个任务建立在前面的基础上做)
② 同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池(lock pool)中。 (2个对象对同一个任务去处理,这个任务只能由一个对象去处理)
③ 其他阻塞:运行的线程执行Thread.sleep(longms)或t.join()方式,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时,join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入可运行状态。 (资源不够用)
5.死亡(DEAD):
线程run()、main()方式执行结束,或者因异常退出了run()方法,则该线程结束生命周期。死亡的线程不可再次复生
线程状态: 新建---可运行---运行---阻塞---死亡
协程、回调都是为了效率
常用选项
选项 | 作用 |
---|---|
-a | 显示当前终端下的所有进程信息,包括其他用户的进程 |
-u | 使用以用户为主的格式显示进程信息 |
-x | 显示当前用户在所有终端下的进程信息 |
USER | 启动该进程的用户账号名称 |
PID | 该进程在系统中的数字ID号,在当前系统中是唯一的 |
%CPU | CPU占用的百分比 |
%MEM | 内存占用百分比 |
VSZ | 该进程使用的虚拟内存量(单位:KB) |
RSS | 该进程占用的物理内存量(单位:KB) |
TTY | 表示终端 标明该进程在哪个终端上运行。 pts是远程登录终端,tty1:图像界面,tty2和tty6:字符界面,?:系统本身执行的进程 |
STAT | 该进程的状态 |
START | 启动该进程的时间(什么时候启动的) |
TIME | 该进程占用CPU的时间(启动需要花多少时间) |
COMMAND | 启动该进程的命令的名称 |
STAT进程状态
-D: 不可被唤醒的睡眠状态,通常用于I/O情况 (系统守护进程)
-R: 该进程正在运作
☆ -S: 该进程处于睡眠状态,可被唤醒
-T:停止状态,可能是在后台暂停或进程处于出错状态。
☆ -Z: 该程序应该已经终止,但是其父程序却无法正常的终止他,造成zombie(疆尸)程序的状态D不可中断状态。(进程已经中止,但是部分程序还在内存中) 僵尸进程
-<: 表示进程运行在高优先级上 (高优先级,以下状态在BSD格式中出现)
-N: 表示进程运行在低优先级上 (低优先级)
-L:表示进程有页面锁定在内存中 (被锁入内存)
☆ -s:表示进程是控制进程 (包含子进程)
-l:表示进程是多线程的 (多线程)
-+:表示当前进程运行在后台
-C:进程占用CPU的百分比
+:前台进程
信息 | 含义 |
---|---|
18:58:35 | 当前时间 |
up 10:29 | 系统运行时间 |
2 users | 当前登录的用户数 |
load averaqe :0.00,0.01,0.04 | 系统负载,即任务队列的平均长度,三个数值分别为1分钟、5分钟、15分钟前到现在的平均值 |
平均负载解释
假如是单核cpu:
满负载就是1.00,满负载不是代表系统以及运行不了,而是如果有多出来的任务,那就需要进行等待。
如果为1.20,表示CPU已经超负载运行,有0.2个任务需要进行等待才可以运行。
如果为0.70,表示CPU在未达到满负载运行,还可以运行其他任务。
假如是双核CPU:
那满负载的值就是2.00。其它依次类推
信息 | 含义 |
---|---|
201 total | 总进程数201个 |
1 running | 正在运行的进程数1个 |
200 sleeping | 休眠的进程数:200个 |
0 stopped | 终止的进程数:1个 |
0 zombie | 僵死无响应的进程数:0 |
信息 | 含义 |
---|---|
0.0 us | 用户占用 |
0.0 sy | 内核占用 |
0.0 ni | 优先级调度占用 |
100.0 id | 空闲CPU |
0.0 wa | I/O等待占用 |
0.0 hi | 硬件中断占用 |
0.0 si | 软件中断占用 |
0.0 st | 虚拟化占用 |
信息 | 含义 |
---|---|
total | 总内存空间 |
free | 空闲内存 |
used | 已用内存 |
buff/cache | 缓冲区和缓存区的总和 |
信息 | 含义 |
---|---|
total | 总交换空间 |
free | 空闲交换空间 |
used | 已用交换空间 |
avail Mem | 可用物理空间 |
PID | 进程id号 |
USER | 进程所有者的用户名 |
PR | 优先级(由内核动态调整),用户不能 |
NI | 进程优先级,nice值,负值表示高优先级,正值表示低优先级,用户可自己调整 |
VIRT | 虚拟内存,是进程正在使用的所有内存 |
RES | 进程所使用的物理内存 |
SHR | 共享内存大小,(单位KB) |
S | 进程状态 |
%CPU | 上次更新到现在的CPU时间占用百分比 |
%MEM | 进程使用的物理内存百分比 |
TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
COMMAND | 命令名/命令行 |
CPU 内存占用过大的处理方法
top
按k 后输入内存较大的进程号回车,再次确认并回车,这样就终止该进程
默认情况下每3秒刷新一次,按s键修改刷新时间,按空格:立即刷新
top 命令全屏操作界面快捷键
命令键 | 功能 |
---|---|
P | 按CPU排序 |
M | 按内存排序 |
T | 按时间排序 |
k | 根据提示输入指定进程的PID号,并按Enter键终止对应的进程 |
p | 进程IP,查看某个进程状态 |
N | 根据启动时间进行排序 |
数字键1 | 显示每个内核的CPU的个数和状态 |
h | 可以获得top程序的在线帮助信息 |
u/U | 指定显示的用户 |
q | 退出top程序 |
选项 | 作用 |
---|---|
-l | 同时输出对应的进程名以及PID |
-U | 查询特定用户的进程 |
-t | 查询在特定终端运行的进程 |
选项 | 作用 |
---|---|
-p | 使用时可以同时列出对应的PID号 |
-u | 可以列出对应的用户名 |
-a | 可以列出完整的命令信息 |
bg(在后台暂停的进程恢复运行)
fg(把进程从后台拿到前台)
&(把进程放入后台)
ctrl+z(将当前进程挂起,放入后台暂停执行)
tail -f /var/log/messages & 把该进程放入后台
jobs -l 查看是否放入后台
fg+任务号 把后台的任务放到前台
ctrl+z 把该任务挂起并放入后台暂停执行
bg 把该暂停任务恢复运行并继续放在后台
jobs 查看是否恢复运行
killall+进程名字 终止所有该名字的进程
pkill 可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特定的进程
选项 | 作用 |
---|---|
-U | 根据进程所属的用户名终止相应进程 |
-t | 根据进程所在的终端终止相应进程 |
atq 查看一次性任务
atrm+任务号 删除一次性任务
ctrl+D(D不区分大小写) 提交一次性任务
按照预先设置的时间周期(分、时、日、月、周)重复执行用户指定的命令操作
属于周期性计划任务
主要设置文件
全局配置文件,位于文件:/etc/crontab
系统默认的设置,位于目录:/etc/cron.d/
用户定义的设置,位于文件:/var/spool/cron/用户名
概括:crontab守护进程会自动检查/etc/crontab文件、/etc/cron.d/目录及/var/spool/cron/目录中的改变,如果发现配置有更改,它们就会被载入内存,所以当某个crontab文件改变后并不需要重新启动,crond守护进程就可设置生效。
字段 | 分钟 | 小时 | 日期 | 月份 | 星期 | 命令 |
---|---|---|---|---|---|---|
范围 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7(0或7代表周日) | 要执行的命令或程序脚本 |
时间数值的特殊表示方法
* : 表示该范围内的任意时间
,:表示间隔的多个不连续时间点
- :表示一个连续的时间范围
/ :指定间隔的时间频率
分 时 日 月 周
10 8 * * 1-5 周一到周五每天8点10分
20 19 * * 1,5,7 每周一、三、五的晚上7点20分
*/2 10 * * * 10点的每2分钟
0 * */2 * * 每2天
0 5-11/2 * * * 5点到11点间每2小时
默认情况下不使用-u是针对root用户,只有root用户才能对其它用户使用-u选项
编辑计划任务
格式:crontab -e [-u 用户名]
查案计划任务(不加-u就是查看自己的计划任务表,加-u就是指定查看某用户的计划任务表)
格式:crontab -l [-u 用户名]
删除计划任务(删除全部,若要删除某一个,需要进入到crontab -e 内部进行删除)
格式:crontab -r [-u 用户名]
①定时写入任务
②定时删除任务
程序、进程、线程
静态进程查询 ps -aux pgrep pstree
动态进程查询 top
jobs -l & bg fg
终止进程 kill killall pkill
任务管理 一次性任务 at 周期任务 crontab