程序和进程的关系
程序
- 保存在静态、光盘等介质中的可执行代码和数据
- 文件中静态保存的代码
进程
- 在CPU及内存中运行的程序代码
- 动态执行的代码
- 父、子进程
- 每个进程可以创建一个或多个进程
线程和进程的区别
- 定义不一样,进程是执行中的一段,而一个进程中执行中的每个任务即为一个线程
- 一个线程只可以属于一个进程,但一个进程能包含多个线程
- 线程无地址空间,它包括在进程的地址空间里
- 线程的开销或代价比进程的小
查看进程统计信息ps
查看静态的进程统计信息
方法一:ps aux “-”可加可不加
选项解释
a:显示终端上的所有进程,包括其他用户的进程
u:表示列出进程的用户
x:显示所有终端的进程
各列的解释:
USER:进程的用户
PID:进程的ID
%CPU:进程占用的CPU百分比
%MEM:占用内存的百分比
VSZ:该进程使用的虚拟内存量(KB)
RSS:该进程占用的物理内存量(KB)
TTY:启动进程的终端名,不是从终端启动的进程则实现为?
STAT:该进程的状态(D:不可中断的休眠状态 R:正在运行状态 S:处于休眠状态,可被唤醒 T:停止状态,可能是后台暂停或进程处于跟踪调试状态 Z:僵尸进程,进程已经中止,但是部分还在内存当中)
TEME:该进程实际使用CPU运行的时间
COMMAND:进程的启动命令
僵尸进程:
一个进程结束了,但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程,因为每个进程结束时候,系统都会扫描当前系统中所运行的所有进程,看有没有那个进程是刚刚结束的这个进程的子进程,如果是,就由Init来接管它,成为它的父进程,子进程退出后Init会回收其占用的相关资源
但是当子进程比父进程先结束,而父进程又没有收回子进程,释放子进程占用的资源,此时子进程就会成为僵尸进程
方法二:ps -elf “-”要加,不然会加载不全
选项说明
-e:显示系统内所有进程信息
-l:使用长格式显示进程信息
-f:使用完整的格式显示进程信息
-a:显示所有进程pid
-T:查看线程信息
各列的解释
F:内核分配给进程的系统标记
S:进程状态
UID:启动这些进程的用户
PID:进程的进程ID
PPID:父进程的进程号(如果该进程是由另一个进程启动的)
C:进程生命周期中的CPU利用率
PRI:进程的优先级(越大的数字代表越低的优先级)
NI:谦让度值用来参加决定优先级
ADDR:进程的内存地址
SZ:假如进程被换出,所需交换空间的大小
WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名
STIME:进程启动时的系统时间
TTY:进程启动时系统时间
TIME:运行进程需要的累计CPU时间
CMD:进程的启动命令
##显示所有线程
查看进程信息top
查看动态的进程排名信息
第一行是任务队列信息
19:54:53 系统时间
up 7:05 系统已运行时长
1 user 当前登录用户数
load average:0.00,0.01,0.05 系统负载,即单位时间内系统处理任务数,后面三个数值分别为1分钟、5分钟、15分钟前到现在的平均值
第二行为进程信息
Tasks 总进程数
running 正在运行的进程数
sleeping 休眠的进程数
stopped 中止的进程数
zombie 僵死的进程数
第三个行为CPU信息
us 用户占用
sy 内核占用
ni 优先级调度占用
id 空闲CPU,要了解空闲CPU百分比,主要看%id部分
wa I/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个数和状态 |
tty终端
Centos7系统,tty1表示图形界面,如下图
tty2-tty6表示文字界面,可以使用Ctr+Alt+F1-F6切换,如下图
查看进程信息pgrep
-U:指定特定用户
-t:指定终端
查看进程树pstree命令
进程的启动方式
手工启动
- 前台启动:用户输入命令,直接执行程序
- 后台启动:在命令行尾加入“&”符号‘’
调度启动
- 使用at命令,设置一次性计划任务
- 使用crontab命令,设置周期性计划任务
进程的前后台调度
Ctr+Z组合键
将当前的进程挂起,即调入后台并停止执行
jobs命令
##查看处于后台的任务列表
fg命令
##将后台进程恢复到前台运行,可指定任务序号
终止进程的运行
Ctr+c组合键
-
中断正在执行的命令
kill、killall命令
- kill用于终止指定PID号的进程
- killall用于终止指定名称相关的所有进程(会造成误杀现象)
- -9选项用于强制终止(会造成数据丢失)
pkill命令
-
根据特定的条件终止相应的进程
常用命令选项
- -U:根据进程所属的用户名终止相应的进程
- -t:根据进程所在的终端终止相应的进程
计划任务管理
一次性计划任务
at命令
at [HH:MM] [yyyy-mm-dd] 时 : 分 年-月-日 |
crontab命令
- 按照预先设置的时间周期(分、时、天、月、周)重复执行用户指定的命令操作
- 属于周期性计划任务
主要设置文件
- 全局配置文件,位于文件:/etc/crontab
- 系统默认的设置,位于目录:/etc/cron.*/
- 用户定义的设置,位于文件:/var/spool/cron/用户名
管理crontab计划任务
编辑计划任务
crontab -e [-u 用户名] -u缺省时默认是针对当前用户 |
输入命令
编辑计划任务
查看计划任务
crontab -l [-u 用户名] |
删除计划任务
crontab -r [-u 用户名] |
crontab任务配置的格式
时间周期设置:
30 6 2 1 2 分 时 日 月 周 |
任务内容设置
run_command 命令或脚本文件 |
时间数值的特殊表示方法:
- *表示该范围内的任意时间
- ,表示间隔的多个不连续时间点
- -表示一个连续的时间范围
- /指定间隔的时间频率
查询日期不同格式的命令
编辑计划任务的第二种方法:
编辑计划任务的第三种方法:
输入命令
编辑计划任务,保存并退出