目录
一、进程的概念与基本组成
(一)进程的定义与特点
定义:进程是计算机系统中资源分配和调度的基本单位,代表一个正在执行的程序实例。
特点:
1.独立性:每个进程拥有独立的地址空间、文件描述符、环境变量等资源,互不干扰。一个进程崩溃通常不会直接影响其他进程。
2. 动态性:进程具有生命周期。
(1)新建(New):进程刚创建
(2)就绪(Ready):等待CPU分配
(3)运行(Running):进程正在CPU上执行指令。
单核CPU同一时刻只能有一个进程处于此状态。
(4)阻塞(Waiting):等待I/O或事件
(5)终止(Terminated):执行完成
3.并发性:多个进程可并发执行,通过时间片轮转或优先级调度共享CPU资源。操作系统通过上下文切换实现多任务。
上下文切换(Context Switching)是操作系统实现多任务的核心机制,指CPU从一个进程切换到另一个进程时,保存当前任务的执行状态(上下文),并加载新任务的状态的过程。
进程与线程的区别:进程是资源分配的最小单位,线程是CPU调度的最小单位。同一进程内的线程共享内存和文件资源。
(二)按功能角色分类
系统进程:由操作系统内核管理,提供基础服务(如内存管理、进程调度)。
用户进程:由用户主动启动。权限受用户账户限制,生命周期与用户会话相关。
用户进程运行在用户空间(User Space),硬件操作由内核空间(Kernel Space)控制。
用户进程若需操作硬件,须通过系统调用/设备文件与内核交互,由内核代为完成硬件操作。
-
系统调用:通过内核提供的接口访问设备文件(如
/dev
目录下的设备节点)。 -
设备文件:硬件设备通常映射为文件,用户进程通过文件权限(如
rw-
)决定是否可操作。
(三)进程控制块(PCB)
操作系统通过PCB管理进程,包含以下信息:
- 进程ID(PID):唯一标识符
- 程序计数器:下一条指令地址
- 寄存器状态:CPU上下文
- 内存指针:代码、数据、堆栈位置
- 优先级:调度权重
- I/O状态:占用设备列表
二、进程调度
(一)进程管理
- # 命令 & //命令放入后台运行。了解即可,一般不用。若终端异常退出,则命令自动结束
- # nohup 命令& //命令放入后台运行。若终端退出,命令依旧执行
- Ctrl +Z 快捷键 //将前台运行的进程放入后台运行
- # fg 后台进程编号 //将后台进程调入前台运行
- # jobs -l //查看后台进程
- Ctrl +Z
- # kill [信号] 进程pid //向进程发送信号
- # kill -l //查看所有信号
- # kill 进程pid //(默认15)正常终止进程,允许清理资源。
- # kill -9 进程pid //强制终止进程,或 # kill -KILL 进程pid。进程运行期间产生的资源并没有回收,可能会出现这种情况
- # kill -18 进程pid //恢复进程。或 # kill -CONT 进程pid
- # kill -19 进程pid //暂停进程。或 # kill -STOP 进程pid
暂停的进程不可以发送kill -15进程停止的哦。-9可以。
(二)计划任务
计划任务(Scheduled Tasks):操作系统或应用程序中用于在特定时间或条件下自动执行任务的机制。
1、一次性任务
在特定时间点或条件下执行一次的任务,执行完成后不会重复。
(1)同步时间
- # ntpdate 时间服务器地址 //阿里的是ntp.aliyun.com
at 是 Linux 中用于安排一次性任务的命令,依赖 atd 服务运行。
(2)安装 at
工具
(3)启动atd服务
- # systemctl start atd //立即启动atd服务。
- # systemctl enable atd //开机自动启动atd服务。
(4)制定一次性任务
输入命令后,按 Enter
进入交互模式,输入要执行的命令,最后按 Ctrl+D
保存。
指定时间格式:
- 相对时间:
now + 2 hours
(2 小时后) - 绝对时间:
10:00 2024-05-20
(指定日期时间)
(5)管理任务
- # atq //查看待执行的一次性任务:
- # atrm 任务编号 //删除一次性任务
- # at -c 任务编号 //查看一次性任务详情
2、周期性任务
按固定时间间隔重复执行,如每日备份、每周清理等。
- # crontab -e //编辑当前用户的定时任务(cron jobs)
(1)时间字段说明
分钟(0-59) 小时(0-23) 日(1-31) 月(1-12) 星期(0-7)
*
表示所有可能的值,
分隔多个值(如1,3,5
)-
表示范围(如1-5
)/
表示步长(如*/10
表示每 10 个单位)
eg:每天晚上十点半<=>30 22 * * *
每周一三五晚上九点<=>0 21 * * 1,3,5
每天八点半,九点半..一二点半<=>30 8-12 * * *
每隔半小时一次<=>*/30 * * * *
早上8点到晚上六点每隔三小时 0 8-18/3 * * *
(2)操作字段说明
(1)%在计划任务里作为命令的终止符,所以要加转义字符\
(2)写全命令的路径,尤其是源码安装(which)
- # vim /etc/crontab //查看cron的默认PATH
cron任务执行时,通常不加载用户的完整环境变量,未写全路径可能导致命令无法被找到。
(3)设置完成后,若命令会产生输出,则默认信息会当成邮件发给我们。
//将命令输出重定向到/dev/null,可以丢弃输出数据。所以若不想收邮件则&> /dev/null