目录
一、程序和进程
1.程序
2.进程
3.程序和进程的区别
二、线程
1.线程的概念
2.进程与线程的关系
3.cpu时间分片
4.线程生命周期
三、查看进程统计信息
1.PS命令查看静态进程统计信息
2.top命令查看动态进程信息
3.pgrep命令根据特定条件查询进程信息
4.pstree命令以树形结构列出进程信息
5.jobs和&
6.bg和fg命令
四、计划任务管理
1.at 指定时间操作
2.crontab
保存在硬盘、光盘等介质中的可执行代码和数据
静态保存的代码
在CPU及内存中运行的程序代码
动态执行的代码
父、子进程(每个程序可以创建一个或多个进程)
进程是动态的,程序是静态的
程序是二进制文件,进程是程序运行的过程
有生命周期和运行状态
进程下面还有多个线程
进程是动态的,程序是静态的
程序是二进制文件,进程是程序运行的过程
有生命周期和运行状态
线程是操作系统OS能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.
一个进程可以开启多个线程,其中有一个主线程来调用本进程中的其他线程。
我们看到的进程的切换,切换的也是不同进程的主线程
多线程可以让同一个进程同时并发处理多个任务,相当于扩展了进程的功能。
一个操作系统中可以有多个进程,一个进程中可以包含一个线程(单线程程序),也可以包含多个线程(多线程程序)
每个线程在共享同一个进程中的内存的同时,又有自己独立的内存空间.
所以想使用线程技术,得先有进程,进程的创建是OS操作系统来创建的。
时间片,即CPU分配给各个线程的一个时间段,称作它的时间片,即该线程被允许运行的时间,如果在时间片用完时线程还在执行,那CPU将被剥夺并分配给另一个线程,将当前线程挂起,如果线程在时间片用完之前阻塞或结束,则CPU当即进行切换,从而避免CPU资源浪费,当再次切换到之前挂起的线程,恢复现场,继续执行。
新建状态(New) : 当线程对象创建后就进入了新建状态.如:Thread t = new MyThread();
可运行状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu的使用权。
运行状态(Running):当CPU调度了处于就绪状态的线程时,此线程才是真正的执行,即进入到运行状态
就绪状态是进入运行状态的唯一入口,也就是线程想要进入运行状态状态执行,先得处于就绪状态
阻塞状态(Blocked):处于运状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入就绪状态才有机会被CPU选中再次执行.
根据阻塞状态产生的原因不同,阻塞状态又可以细分成三种:
等待阻塞:运行状态中的线程执行wait()方法,本线程进入到等待阻塞状态
同步阻塞:线程在获取synchronized同步锁失败(因为锁被其他线程占用),它会进入同步阻塞状态
其他阻塞:调用线程的sleep()或者join()或发出了I/O请求时,线程会进入到阻塞状态.当sleep()状态超时.join()等待线程终止或者超时或者I/O处理完毕时线程重新转入就绪状态
死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期
ps -aux 查看静态的进程统计信息
常用参数
-a:显示当前终端下的所有进程信息,包括其他用户的进程。与"x"选项结合时将显示系统中所有的进程信息
-u:使用以用户为主的格式输出进程信息
-x:显示当前用户在所有终端下的进程信息
USER:进程的用户
PID:进程的ID
%CPU:进程占用的CPU百分比
%MEM:占用内存的百分比
VSZ:该进程使用的虚拟内存量(KB)
RSS:该进程占用的物理内存量(KB)
TTY:启动进程的终端名。不是从终端启动的进程则显示为 ?
STAT:
该行程的状态:
- D:不可中断的休眠状态;R:正在运行状态;S:处于休眠状态,可被唤醒;T:停止状态,可能是在后台暂停或进程处于跟踪 调试状态;Z:僵尸进程,进程已经中止,但是部分程序还在内存当中;
D:不可中断状态
T:调试、程序执行一般停止
R:该程序目前正在运行,或者可被运作;
S:该程序目前正在睡眠当中(可说是idle状态),但可被某些讯号(sinqnal)唤醒
Z:该程序应该已经终止,但是其父程序却无法正常的终止他,造成zombie(僵尸)程序的状态
<:表示进程运行在高优先级上
N:表示进程运行在低优先级上
L:表示进程有页面锁定在内存中
s:表示进程是控制进程
l:表示进程是多线程的
+:表示当前进程运行在前台
START:该进程被触发启动时间
TIME:该进程实际使用CPU运行的时间
COMMAND:进程的启动命令
top 命令全屏操作界面快捷键
默认:3s刷新一次,按s修改刷新时间按空格:立即刷新
p:按cpu排序
M:按内存排序
T:按时间排序
P:进程IP,查看某个进程状态
N:键根据启动时间进程排序
u/U:指定显示的用户
h:可以获得lop程序的在线帮助信息
q:键可以正常退出top程序
Linux系统可以通过top命令查看系统的CPU、内存、运行时间、交换分区、执行的线程等信息。
第一行:
top - 21:07:09 up 1:24, 2 users, load average: 0.05, 0.03, 0.05
依次对应:系统当前时间 up 系统到目前为止i运行的时间, 当前登陆系统的用户数量, load average后面的三个数字分别表示距离现在一分钟,五分钟,十五分钟的负载情况。
第二行:
Tasks: 175 total, 1 running, 174 sleeping, 0 stopped, 0 zombie
依次对应:tasks表示任务(进程),175 total则表示现在有 175 个进程,其中处于运行中的有1个,174个在休眠(挂起),stopped状态即停止的进程数为0,zombie状态即僵尸的进程数为0个。
第三行:cpu的状态
%Cpu(s): 13.7 us, 1.5 sy, 0.0 ni, 84.2 id, 0.6 wa, 0.0 hi, 0.0 si, 0.0 st
us:user 用户空间占用cpu的百分比
sy:system 内核空间占用cpu的百分比
ni:niced 改变过优先级的进程占用cpu的百分比
空闲cpu百分比
wa:IO wait IO等待占用cpu的百分比
hi:Hardware IRQ 硬中断 占用cpu的百分比
si:software 软中断 占用cpu的百分比
st:被hypervisor偷去的时间
第四行:内存状态
KiB Mem : 3861520 total, 3012324 free, 388684 used, 460512 buff/cache
依次对应:物理内存总量(3.68G),空闲内存总量(2.8G),使用中的内存总量(0.37G),缓冲内存量(0.43G)
第五行:swap交换分区
KiB Swap: 8191996 total, 8191996 free, 0 used. 3174224 avail Mem
依次对应:交换区总量(7.8G),空闲交换区总量(7.8G),使用的交换区总量(0G),可用交换取总量(3.02G)
第六行:各进程的监控
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)
常用的参数:
-l:选项可同时输出对应地进程名及PID
-U:选项查询特定用户的进程
-t:选项查询在特定终端运行的进程
pstree命令默认情况下只显示各进程的名称
结合一下常用的参数使用:
-p:选项使用时可以同时列出对应的PID号
-u:选项可以列出对应的用户名
-a:选项可以列出完整的命令信息
"&"表示挂起当前进程并不会输出结果
jobs 命令可以查看处于后台的任务列表
-l:选项可以同时显示对应的PID号
bg命令
使用bg命令可以将后台中暂停执行的任务恢复运行
fg命令
使用fg命令,可以将后台任务重新恢复到前台运行
atp 查看待执行操作
atrm 5 删除第五条任务
通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令。
时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。
这个命令非常设合周期性的日志分析或数据备份等工作。
主要配置文件
全局配置文件,位于文件:/etc/crontab
系统默认的设置,位于目录:/etc/cron.*/
用户定义的设置,位于文件:/var/spool/cron/用户
* * * * *
minute hour day month week
分(0-59) 时(0-23) 天(1-31) 月(1-12) 星期(0-6)
例:
0 17 * * 1-5 周一到周五每天17:00
30 8 * * 1,3,5 每周一,三,五的8点30分
0 8-18/2 * * * 8点到18点之间每2小时
0 * */3 * * 每3天
-u user:用来设定某个用户的crontab服务,
例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。
file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。
如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,
并将它们载入crontab。
-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
-r:从/var/spool/cron目录中删除某个用户的crontab文件,
如果不指定用户,则默认删除当前用户的crontab文件。
-i:在删除用户的crontab文件时给确认提示。
例:编辑计划任务
crontab -e
每天11:35分时向/mnt/1.txt 写入 “123456”
到时间后查看验证
查看计划任务
crontab -l
删除计划任务
crontab -r