内容概要
1、程序和进程
什么是程序:
程序是保存在硬盘、光盘等介质中的可执行代码和数据
文件中静态保存的代码
什么是进程:
在CPU及内存中运行的程序代码
动态执行代码
父、子进程
每个程序可以创建一个或多个进程
进程和线程的区别:
进程是资源分配最小单位,线程是程序执行的最小单位。 计算机在执行程序时,会为程序创建相应的进程,进行资源分配时,是以进程为单位进行相应的分配。每个进程都有相应的线程,在执行程序时,实际上是执行相应的一系列线程。
1、查看进程信息
1、ps aux
a表示显示终端上的所有进程,也包括其他用户进程
u表示列出进程的用户
x表示显示所有终端的进程
每个字段的解释:
USER:进程的用户。
PID:进程的ID。
%CPU:进程占用的CPU百分比
%MEM:占用内存的百分比。
VSZ:该进程使用的虚拟内存量(KB)
RSS:该进程占用的物理内存量(KB)
TTY:启动进程的终端名,不是从终端启动的进程则显示?
STAT:五个状态(D:不可中断的休眠状态;R:正在运行状态;S:处于休眠状态,可被唤醒;T:停滞状态,可能是在后台暂停或进程处于跟踪调试状态;Z:僵尸进程,进程已经终止,但是部分程序还在内存当中)
START:该进程被触发启动时间。
TIME:该进程实际使用CPU运行的时间。
COMMAND:进程的启动命令
僵尸进程:僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。如果父进程先退出 ,子进程被init接管,子进程退出后init会回收其占用的相关资源。
2、ps -elf
-e 用来显示系统内的所有进程信息。
-l 使用长格式显示进程信息。
-f 使用完整的格式显示进程信息。
各层的解释:
F:内核分配给进程的系统标记。
S:进程的状态。
UID:启动这些进程的用户。
PID:进程的进程ID。
PPID:父进程的进程号(如果该进程是由另一个进程启动的)
C:进程生命周期中的CPU利用率。
PRI:进程的优先级(越大的数字代表越低的优先级)
NI:谦让度值用来参与决定优先级
ADDR:进程的内存地址。
SZ:假如进程被换出,所需交换空间的大致大小。
WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名。
STIME:进程启动的系统时间。
TTY:进程启动时的终端设备。
TIME:运行进程需要的累计CPU时间。
CMD:进程的启动命令。
3、top
上面使用的两个命令全都是静态查看,如果我想动态的查看进程信息呢?就可以用到top命令,top这个命令可以每隔5s刷新一次进程信息。
第一行是任务队列信息:
14:50:58表示系统时间。
up 1:22表示系统已运行时长
1 suer 当前登录用户数
load average:0.06,0.60,0.48表示系统负载,单位时间内系统处理的任务数,三个数值分别表示1分钟、5分钟、15分钟前到现在的平均值
第二行是进程信息
Tasks是总进程数
running正在运行的进程数
sleeping表示休眠的进程数
stopped表示终止的进程数
zombie表示僵死的进程数
第三行是CPU的信息
us 用户占用
sy 内核占用
ni 优先级调度占用
id 空闲CPU
wa I/O等待占用
hi 硬件中断占用
si 软件中断占用
st 虚拟化占用
第四行为内存的信息
total 总内存空间
free 空闲内存
used 已用内存
buff/cache 物理内存和交换内存的缓冲区总和
第五行为交换空间的信息
total 总交换空间
free 空闲交换空间
used 已用交换空间
avail Mem 可用物理空间
top的常用快捷键:
P(大写)键:CPU使用率从大到小排列
M键:根据驻留内存大小进行排序
q:退出
数字1:显示CPU个数和状态。
tty终端:Centos7系统,tty1表示图形界面,tty2-tty6表示文字界面,可用Ctrl+Alt+F1-F6切换。pts说明是用远程工具连接的,比如xshell。
4、pgrep
pgrep可用根据指定条件查询进程PID号。
-l:根据进程名查找
-N:查询用户的进程
5、pstree
pstree可以输出Linux系统中各种进程的树形结构。
2、进程的启动方式
1、手动启动:前台启动:输入命令,直接执行。后台启动:在命令行尾假如”&“符号。
前台启动就不做示范了,这里用后台启动
进程的前后台调度:
Ctrl+Z组合键:将当前进程挂起,即调入后台并停止执行。
jobs -l:查看处于后台的任务列表
fg:将后台进程恢复到前台运行
3、终止进程
Ctrl+C组合键:中断正在执行的命令
kill、killall命令
kill用于终止指定PID号的进程
killall用于终止指定名称相关的所有进程
-9可用用于强制终止。
pkill命令
pkill根据特定条件终止相应的进程
常用命令选项:
-U:根据进程所属的用户名终止相应进程
-t:根据进程所在的终端终止相应进程
计划任务管理
at命令
at命令是一次性计划任务:at [HH:MM ] [yyyy-mm-dd]
设置在2021年4月22日的晚上8点,执行init6重启这个命令。其实如果是当天执行的话,可以不加年份。
可以用atq来查看当前设置的一次性计划任务
删除可以用atrm,加上前面的序号就行。
crontab命令
1、按照设置的时间周期来执行指定操作,周期(分钟,小时,日,月,周)
2、属于周期性计划任务
3、crontab的全局配置文件,位于:/etc/crontab
系统默认的设置,位于目录:/etc/cron.*/
用户定义的设置,位于文件:/var/spool/cron/用户名
管理crontab计划任务:
crontab -e [-u 用户名] 不加-u时默认针对当前用户
查看计划任务:
crontab -l [-u 用户名]
删除计划任务:
crontab -r [-u 用户名]
时间数值的特殊表示方法:
- 表示范围内任意时间
,表示间隔的多个不连续的时间点
- 表示一个连续的时间
/ 间隔的时间频率
例子:
0 13 * * 2-5 周一到周五每天13:00
20 5 * * 2,4,6 每周二,四,六的5点20分
0 2-18/2 * * * 2点到18点之间每2小时
0 * */5 * * 每5天
命令:每年的6月8日的13点50分去重启网卡
可以进行crontab -l 进行查看设置的周期性计划任务
总结
查看进程信息可以用命令:ps aux、ps -elf、top(动态查看)、pgrep(可以指定名称查询)、pstree(用树形结构输出进程),如果我们要在后台启动进程,需要在命令后面加上&,然后用 jobs-l 可以查看后台运行的进程,fg可以将后台进程恢复到前台运行。kill和killall都可以终止进程,不过killall会终止所有指定名相关进程,所以要谨慎使用,两个命令都可以加上 -9 来强制终止。pkill可以删除指定用户的进程,也可加 -9。at命令是一次性计划命令,只执行一次。crontab可以通过设置周期来执行计划命令。