文章目录
进程和计划任务管理
一、进程
进程的概念
我们知道操作系统最核心的概念就是进程,进程简单来说就是在操作系统中运行的程序,它是操作系统资源管理的最小单位,但是进程是一个动态的实体,它是程序的一次执行过程,进程和程序的区别在于,进程是动态的,程序是静态的,进程是运行中的程序,而程序是一些保存在硬盘上的可执行代码。
进程状态
程序:二进制文件,静态 /bin/date,/usr/sbin/sshd
进程:是程序运行的过程,动态,有生命周期及运行状态。
线程状态
新建(NEW):新创建了一个线程对象。
可运行(RUNNABLE);线程对象创建后,其他线程(比如main线程)调用了该对象的start(方法),该状态的线程唯一可运行线程池中,等待被线程调度选中,获取cpu的使用权。
运行(RUNNING);可运行状态(runnable)的线程获得了cpu时间片(timeslice)执行程序代码。
阻塞(BLOCKED):阻塞状态状态是指线程因为某种原因放弃了cpu使用权,也既让出了cpu timelise 转到运行(running)状态。阻塞的情况分为三种:
(1)等待阻塞:运行的线程执行o.wait方法,JVM会把改线程放入等待队列中。
(2)同步阻塞:运行的1线程在获取对象的同步锁时间,若改同步锁被别的线程占用,则JVM会把改线程放入锁池中。
(3)系统资源不足)运行(running)的线程执行Thread.sleep (longms)ms)或t. join()方法,或者发出了I/o请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/o处理完毕时,线程重新转入可运行(runnable)状态。
死亡(DEAD)线程run()、main()方法执行结束,或者因异常退出了run()方法,则该线程结束生命周期。死亡的线程不可再次复生。
线程状态: 新建—可运行—运行—阻塞—死亡
程序、进程理论
程包含在进程之中,是进程中的实际运作单位,也是操作系统中能够独立运行的基本单位,也称作轻量进程,一个进程中可以并发多个线程,每条线程可以并执行不同的任务,而我们在任务管理器中看到的一个个进程则是由我们下载的应用程序所产生的,当然一个应用程序也可以包含多个进程,换一种说法就是我们打开应用程序,在后台运行了相应的进程,然后我们点击了应用程序中的某个功能之后由对应进程中的线程,负责此功能的运行,这样就可以不用运行整个应用程序或者进程,就可以完成操作者的命令了,即可节约了资源利用率,也增强了cpu的吞吐率。
进程和多线程的区别
进程是操作系统资源分配的基本单位,而线程是任务调查和执行的基本单位。没有线程的进程可以视为单线程,如果一个进程内有多线程,则执行过程不是一条线的,而是多条线共同完成的,线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程
二、查看进程
查看静态进程统计信息(ps)
常用选项(可结合使用)
-a:显示终端上的所有进程,包括其它用户的进程。
-u:表示列出进程的用户
-x: 表示所有终端的进程
进程统计信息内容
USER:进程的用户
PID:进程的ID
%CPU:进程占用的cpu百分比
%MEM:占用内存的百分比
VSZ:该进程使用的虚拟内存量
RSS:该进程占用的物理内存量
TTY:启动进程的终端名,不是从终端启动的进程显示
STAT:
D:不可中断的休眠状态;R:正在运行状态;S:处于休眠状态,可被唤醒;T:停止状态,可能是在后台暂停或进程处于跟踪 调试状态;Z:僵尸进程,进程已经中止,但是部分程序还在内存当中
START:进程被触发启动的时间
TIME:进程实际使用CPU运行的时间
COMMAND:进程的启动命令
STAT进程状态
-D: 不可被唤醒的睡眠状态,通常用于I/O情况 (系统守护进程)
-R: 该进程正在运作
-S: 该进程处于睡眠状态,可被唤醒
-T:停止状态,可能是在后台暂停或进程处于出错状态。
-Z: 该程序应该已经终止,但是其父程序却无法正常的终止他,造成zombie(僵尸)程序的状态D不可中断状态。(进程已经中止,但是部分程序还在内存中)
-<: 表示进程运行在高优先级上 (高优先级,以下状态在BSD格式中出现)
-N: 表示进程运行在低优先级上 (低优先级)
-L:表示进程有页面锁定在内存中 (被锁入内存)
-s:表示进程是控制进程 (包含子进程)
-l:表示进程是多线程的 (多线程)
-+:表示当前进程运行在后台
-C:进程占用CPU的百分比
+:前台进程
僵尸进程
一个进程结束了,但是如果该进程的父进程已经结束了,那么该进程就不会变成僵尸进程,因为每个进程结束的1时候,系统都会扫描当前系统中所运行的1所以进程,看有没有那个进程是刚刚结束的子进程,如果是的话,就由init来接管它,成为它的父进程,子进程退出后init会回收其占用的相关资源。
但是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。
查看动态进程统计信息top
进程动态信息
第一行:任务队列信息
09:30:33 系统时间
up 17:30 系统已运行时长
1 user 当前登录用户数
load average:0.00,0.01,0.05 系统负载,即单位时间内系统处理的任务数,后面三个数值分别为1分钟,5分钟,15分钟前到现在的平均值
第二行:进程信息
Tasks 总进程数
running 正在运行的进程数
sleeping 休眠的进程数
stopped 终止的进程数
zombie 僵死的进程数
第三行:CPU信息
us 用户占用
sy 内核占用
ni 优先级调度占用
id 空闲cpu
wa l/o等待占用
hi 硬件中断占用
si 软件中断占用
st 虚拟化占用
第四行:内存信息
total 总内存空间
free 空闲内存
used 已用内存
buff/cache 物理内存和交互内存的缓冲区总和
第五行:交换空间的信息
total 总交换空间
free 空闲交换空间
used 已用交换空间
avail Mem 可用物理空间
进程信息区名词解释
PID 进程ID
USER 进程用户
PR 优先级
NI 谦让值,负值表示高优先级,正值表示低优先级
VIRT 进程使用的虚拟内存大小,单位kb
RES 进程使用的物理内存大小,单位kb
SHR 共享内存大小,单位kb
S 进程状态
%CPU 上次更新到现在的CPU占用百分比
%MEM 进程使用的物理内存百分比
TIME 进程使用的CPU时间总计,单位1/100秒
COMMAND 命令名/命令行
Top命令
P 根据CPU使用百分比大小进行排序
M 根据驻留内存大小进行排序
N 根据启动时间进行排序
c 切换显示命令名称和完整命令行
h 可以获得top程序的在线帮助信息
k 根据提示输入指定进程的PID号并按Enter键终止对应的进程
q 退出top程序
数字1 显示CPU个数和状态
查看进程信息:pgrep
pgrep -l shell:查询进程的pid
2177 进程pid
gonme-shell:命令名
选项
-l:同时输出对应的进程名以及PID
-U:查询特定用户的进程
-t:查询在特定终端运行的进程
查看进程树:pstree
以树桩结构列出进程信息
选项
-p:使用时可以同时列出对应的PID号
-u:可以列出对应的用户名
-a:可以列出完整的命令信息
&和job
&:表示挂起当前进程不输出结果
jobs -l :查看处于后台的任务
bg命令:可以将后台中暂停指定的任务恢复
kill
终止进程(kill、killall、pkill)
kill -l :查看所有选项发出的信号
三、计划任务管理
1、一次性计划任务 at(默认当天时间)
atq 查看一次性任务
atrm+任务号 删除一次性任务
ctrl+D(D不区分大小写) 提交一次性任务
2、周期性计划任务 crontab
按照预先设置的时间周期(分、时、日、月、周)重复执行用户指定的命令操作
属于周期性计划任务
主要设置文件
全局配置文件,位于文件:/etc/crontab
系统默认的设置,位于目录:/etc/cron.*/
用户定义的设置,位于文件:/var/spool/cron/用户名
概括:crontab守护进程会自动检查/etc/crontab文件、/etc/cron.d/目录及/var/spool/cron/目录中的改变,如果发现配置有更改,它们就会被载入内存,所以当某个crontab文件改变后并不需要重新启动,crond守护进程就可设置生效。
任务配置格式
周期(分、时、日、月、周)重复执行用户指定的命令操作
属于周期性计划任务
主要设置文件
全局配置文件,位于文件:/etc/crontab
系统默认的设置,位于目录:/etc/cron.*/
用户定义的设置,位于文件:/var/spool/cron/用户名
概括:crontab守护进程会自动检查/etc/crontab文件、/etc/cron.d/目录及/var/spool/cron/目录中的改变,如果发现配置有更改,它们就会被载入内存,所以当某个crontab文件改变后并不需要重新启动,crond守护进程就可设置生效。
任务配置格式