程序和进程概念
1、程序
定义:程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。是保存在硬盘、光盘等介质中。
2、进程(process)
狭义定义:进程就是一段程序的执行过程,进程则是在处理机上的一次执行过程,它是一个动态的概念。其实进程是包含程序的,进程的执行离不开程序,进程中的文本区域就是代码区,也就是程序。
广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
进程概念
第一,进程是一个"执行中的程序" 。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。
第二,进程是一个实体,拥有资源。每一个进程在内存中都有它自己的空间,一般情况下,包括文本区域(text region)(程序的二进制源代码)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储属性变量和进程执行期间使用的动态分配的进程的内存地址;堆栈区域存储着活动过程调用的指令和临时变量。
Linux中的进程状态:
R (TASK_RUNNING),可执行状态,只有在该状态的进程才可能在CPU上运行。
S (TASK_INTERRUPTIBLE),可中断的睡眠状态,处于这个状态的进程因为等待某某事件的发生(比如等待socket连接、等待信号量),而被挂起。
D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态,与TASK_NTERRUPTIBLE状态类似,进程处于睡眠状态,但是此刻进程是不可中断的,这种进程的特征就是kill -9命令杀不死,
而TASK_UNINTERRUPTIBLE状态存在的意义就在于,内核的某些处理流程是不能被打断的。
T(TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态,向进程发送一个SIGSTOP信号,它就会因响应该信号而进入TASK_STOPPED状态,向进程发送一个SIGCONT信号,可以让其从TASK_STOPPED状态恢复到TASK_RUNNING状态,被跟踪的进程下一个断点,进程在断点处停下来的时候就处于TASK_TRACED状态。
Z(TASK_DEAD·EXIT_ZOMBIE),退出状态,进程成为僵尸进程,进程在退出的过程中,处于TASK_DEAD状态,在这个退出过程中,进程占有的所有资源将被回收,除了task_struct结构(以及少数资源)以外。于是进程就只剩下task_struct这么个空壳,故称为僵尸。
之所以保留task_struct,是因为task_struct里面保存了进程的退出码、以及一些统计信息。而其父进程很可能会关心这些信息。
进程的属性
进程ID(PID):是唯一的数值,用来区分进程
父进程的ID (PPID)
启动进程的用户ID (UID)和所归属的组(GID)
进程状态:RSTZD
进程执行的优先级
进程所连接的终端名
进程资源占用:比如占用资源大小(内存、CPU占用量)
查看进程与管理
ps查看进程工具
ps -axu
ps -ef
参数:
a:显示跟当前终端关联的所有进程
u:基于用户的格式显示(U:显示某用户ID所有的进程)
x:显示所有进程,不以终端机来区分
-e
显示系统内所有进程信息
-l
使用长格式显示进程信息
-f
显示完整格式输出
注:最后一列[xxxx]使用方括号括起来的进程是内核态的进程。没有括起来的是用户态进程。
上面的参数输出每列含意:
USER:启动这些进程的用户
PID:进程的ID
%CPU进程占用的CPU百分比;
%MEM占用内存的百分比;
VSZ:进程占用的虚拟内存大小(单位:KB)
RSS:进程占用的物理内存大小(单位:KB)
TTY
启动进程的终端名。不是从终端启动的进程则显示为?
STAT
该行程的状态(D:不可中断的休眠状态;R:正在运行状态;S:处于休眠状态,可被唤醒;T停止状态,可能是在后台暂停或进程处于跟踪调试状态;Z:僵尸进程,进程已经中止,但是部分程序还在内存当中)
START
该进程被触发启动时间
COMAND
进程的启动命令
UID 启动这些进程的用户
PPID 父进程的进程号
C:进程生命周期中的CPU利用率
STIME:进程启动时的系统时间
TTY:表明进程在哪个终端设备上运行。如果显示?表示与终端无关,这种进程一般是内核态进程。另外,tty1-ty6是本机上面的登入者程序,若为pts/0等,则表示运行在虚拟终端上的进程。
TIME:运行进程一共累计占用的CPU时间
CMD:启动的程序名称
五种状态
R:该程序目前正在运作,或者是可被运作;
s:该程序目前正在睡眠当中,但可被某些讯号(signal)唤醒。
T∶该程序目前正在侦测或者是停止了;
z∶该程序应该已经终止,但是其父程序却无法正常的终止他,造成zombie(疆尸)程序的状态
d :不可中断状态.
5个基本状态后,还可以加一些字母,比如: Ss、R+它们含意如下:
< 表示进程运行在高优先级上
N:表示进程运行在低优先级上
L:表示进程有页面锁定在内存中
s:表示进程是控制进程
L:表示进程是多线程的
+表示当前进程运行在前台
START:该proces$被触发启动的时间;
TIME:该process 实际使用CPU运作的时间。
COMMAND:该程序的实际指令
top查看进程工具(动态的)
二三行:进程和cpu信息
Tasks: 120 total:进程总数
running:正在运行的进程数
sleeping:睡眠的进程数
stopped:停止的进程数
zombie:僵尸进程数
%Cpu(s): 0.2 us系统用户进程使用CPU百分比。
0.2 sy,内核中的进程占用CPU百分比
0.0 ni用户进程空间内改变过优先级的进程占用CPU百分比
99.7 id空闲CPU百分比
0.0 wacpu等待完成的时间总量。
0.0 hi (了解)硬中断消耗时间
四五行:(内存和交换空间信息)
total 总内存
free 空闲内存
used 已用内存
buff/cache 物理内存和交换内存的缓冲区总和
avail Mem 总的可用物理内存
第6行:
top快捷键;
默认3s刷新一次,按s修改刷新时间
按空格︰立即刷新。
q退出
P:按CPU排序
M:按内存排序
T:按时间排序
数字键1:显示每个内核的CPU使用率
u/U:指定显示的用户
h:帮助
lsof命令
lsof命令用于查看运行进程读了那些文件,端口(TCP、UDP)被那些进程使用
-i :端口:列出符合条件的进程。
-p 进程号:列出指定进程号所打开的文件;
lsof -p
1安装lsof
2创建一个进程
3查询该进程的进程号
4使用该进程号的查询读过哪些文件
lsof -i
查看进程监听端口
pstree命令
pstree: (display a tree of processes)以树状图显示进程,只显示进程的名字,且相同进程合并显示。
格式: pstree或 pstree -aup
以树状图显示进程,还显示进程PID
安装pstree
控制进程
进程的启动方式
手工启动
前台启动:用户输入命令,直接执行程序
后台启动:在命令行尾加入"&“符号
加入”&"符号后输出信息中就会包括后台任务序号、PID号
调度启动
使用at命令,设置一次性计划任务
使用crontab命令,设置周期性计划任务
进程的前后台调度
Linux后台进程与前台进程的区别
前台进程:是在终端中运行的命令,那么该终端就为进程的控制终端,一旦这个终端关闭,这个进程也随着消失
后台进程:也叫守护进程(Daemon),是运行在后台的一种特殊进程,不受终端控制,它不需要与终端交互;
Linux的大多数服务器就是用守护进程实现的。比如,Web服务器,httpd等。
几个系统相关任务的命令
&
用在一个命令的最后,可以把这个命令放到后台执行.
ctrl +z
将一个正在前台执行的命令放到后台,并且暂停.
jobs
查看当前有多少在后台运行的命令
终止进程的运行
Ctrl+C组合键
中断正在执行的命令
kill、killall命令
kill 通过pid杀死进程
killall 指定名字杀死进程
-9选项用于强制终止
pkill命令
根据特定条件终止响应的进程
常用命令选项
-U:根据进程所属的用户名终止响应进程
-t:根据进程所在的终端终止相应进程
kill -====>列出所有支持的信号(了解)
用最多的是:9信号
改变进程优先级
优先级取值范围为(-20,19),越小优先级越高,默认优先级是0
命令1: nice 指定程序的运行优先级
格式: nice -n | command
命令2: renice 改变程序的运行优先级
格式: renice -n pid
例1∶指定运行vim的优先级为5,然后查看改变的结果,然后在改变优先级
nice -n 5 vim a.txt
输入内容,然后ctrl+z挂起
通过ps查看这个文件的PID号
ps -aux|grep vim
通过top命令查看优先级
top -p 26154
计划任务管理(at、crontab)
什么叫计划任务
就是在约定好的时间执行已经计划好的工作,如每天晚上12点备份一个日志文件,这就是个计划任务。
计划任务的类型
1.系统执行的工作:系统周期性所要执行的工作,如备份系统数据、请理缓存
2.个人执行的工作:某用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置。
计划任务的实现
常用语执行计划任务的命令——at,batch,与周期性任务相关的命令crontabs
at命令和batch命令的区别
at命令旨在特定的之间执行任务; batch命令设置的任务由系统选择空闲时间去执行,空闲时间默认为cpu利用率小于0.8的时候
at命令
at运行要atd服务
centos6:
service atd status #查看atd服务状态
chkconfig --list | grep atd#此命令在centos7上不能执行
centos7:
systemctl status atd #查看atd服务状态
systemctl start atd #开启atd服务
systemctl isenabled atd #查看是否开始开机启动服务,如果弹出enabled,说明开机启动此服务
如果没有就yum安装
at (选项) (参数)
选项
-f:指定包含具体指令的任务文件;(一般是shell脚本)
-q:指定新任务的队列名称;
-l:显示待执行任务的列表; 与atq效果一样
-d:删除指定的待执行任务;
-m:任务执行完成后向用户发送E-mail。
at命令是一次性计划任务
at命令后想要输入执行程序的确切时间(at 20:00 2019-3-1在某天,也可以24:32当天某个时间),然后回车接着在>后输入你想要执行的命令,最后用Ctrl+d组合键退出at
或者at now +10 minutes 十分钟后执行
minutes:表示《分钟》
hours:表示《小时》。
days:表示《天》。
weeks:表示《星期》。
months:表示《月》。
years:表示《年》。
at的黑名单和白名单功能
(黑名单)︰当仅/etc/at.deny存在时(默认)写入deny的用户不能配置at
(白名单)︰当/etc/at.allow存在时/etc/at.deny失效,只有写在allow中的用户才能配置at当/etc/at.allow及/etc/at.deny都不存在时,仅有root才能配置at
crontab命令
按照预先设置的时间周期(分钟、小时、天、月、周)重复执行用户指定的命令操作
crontab属于周期性计划任务
crontab其实是一个命令,用来读取和修改名为crontab的文件。这个crontab文件包含了你要定时执行的程序列表,也包含了执行的时刻。实际上,有两个命令,一个叫crontab,一个叫cron。crontab用于修改crontab文件,cron用于实际执行定时的程序。
启动crond服务
#systemctl start crond
#systemctl enable crond
crontab的常用参数:
crontab -l#列出当前用户下的cron服务的详细内容
crontab -r#删除cron服务
crontab -e#编辑cron服务(命令必须是绝对路径)
主要配置文件
①.全局配置文件,位于文件:/etc/crontab
②.系统默认的设置,位于目录:/etc/cron.*/
③.用户定义的设置,位于文件:/var/spool/cron/用户名
编辑计划任务
crontab -e [-u 用户名]
查看计划任务
crontab -l [-u用户名]
删除计划任务
crontab -r [-u用户名]
-u默认是针对当前用户
acrontab任务配置的格式
时间数值的特殊表示方法
示例
0 15 * * 1-5(周一到周五每天15:00)
30 1 * * 3,4,5(每周三、四、五的1:30)
0 5-11/3 * * *(5点-10点之间每3小时)
0 * */5 * *(每5天.)
所有用户的计划任务,都会在/var/spool/cron/下产生对应的文件