进程和计划任务管理
1.查看进程
1)程序和进程的关系
- 程序
- 保存在硬盘、光盘等介质中的可执行代码和数据
- 文件中静态保存的代码
- 进程
- 在CPU及内存中运行的程序代码
- 动态执行的代码
- 父、子进程
- 每个程序可以创建一个或多个进程
- 父进程保证服务活着,fork创建、管理子进程
- 每个子进程负责该服务的一个功能
2)父、子进程的区别
父进程和子进程是操作系统中进程间关系的两个基本概念。当一个进程创建了另一个进程时,创建进程被称为父进程,而被创建的进程被称为子进程。父进程和子进程之间有一些关键的区别:
- 创建关系:
- 父进程通过调用操作系统提供的进程创建函数(如Unix/Linux系统中的
fork()
)来创建子进程。 - 子进程是由父进程复制自身的代码、数据、堆栈等资源而产生的新进程。
- 父进程通过调用操作系统提供的进程创建函数(如Unix/Linux系统中的
- 进程ID:
- 每个进程都有一个唯一的进程标识符(PID),父进程和子进程拥有不同的PID。
- 父进程的PID在创建子进程后保持不变,而子进程会获得一个新的PID。
- 资源继承:
- 子进程在创建时会继承父进程的一些资源,如打开的文件描述符、信号处理方式、环境变量等。
- 但是,子进程有自己的地址空间、全局变量的副本、堆栈等,这些是独立于父进程的。
- 执行顺序:
- 父进程和子进程的执行顺序是不确定的,取决于操作系统的调度策略。
- 在某些情况下,父进程可能会等待子进程结束(通过调用
wait()
或waitpid()
函数),但这不是必须的。
- 通信和同步:
- 父进程和子进程之间可以通过各种IPC(进程间通信)机制进行通信,如管道、消息队列、共享内存等。
- 它们也可以使用同步原语(如信号量、互斥锁)来协调彼此的执行。
- 生命周期:
- 父进程的终止不一定会导致子进程的终止。子进程可以独立于父进程继续运行。
- 如果父进程在子进程之前终止,操作系统会将子进程的父进程设置为初始化进程(通常是PID为1的
init
进程或systemd
),并负责清理子进程的资源。
- 权限和安全性:
- 子进程通常继承父进程的用户和组身份,但也可能通过设置用户ID(UID)和组ID(GID)来改变其权限。
- 系统管理员可以使用这些特性来创建受限的子进程,以执行特定的任务而不影响系统的安全性。
3)查看进程信息
①ps
命令(查看静态进程信息)
ps
(process status)命令是Unix和类Unix操作系统(如Linux)中用于查看当前系统中运行的进程信息的命令。通过ps
命令,用户可以获得关于进程的状态、PID(进程标识符)、CPU和内存使用情况、运行时间等信息。
以下是ps
命令的一些常用选项和用法:
基本用法
ps -elf
或ps aux
:显示详细的进程信息,包括用户、PID、CPU和内存使用率、启动时间等。
常用选项
-e
或-A
:显示所有进程。-a
:显示所有进程包括其他用户。-f
:显示完整格式的信息。-u
或-U
:显示指定用户或UID的进程。-p
:显示指定PID的进程。-t
:显示指定终端的进程。-x
:显示没有控制终端的进程。-l
:长格式输出,包含更多的进程状态信息。-o
:自定义输出格式。
示例
-
显示当前终端中运行的进程:
ps
-
显示系统中所有运行的进程:
ps -e
-
显示指定用户(例如root)的进程:
ps -u root
-
显示指定PID(例如1234)的进程:
ps -p 1234
-
显示详细的进程信息:
ps -elf
-
自定义输出格式,例如只显示PID、命令和CPU使用率:
ps -eo pid,comm,pcpu
输出示例:
-
ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 191004 4036 ? Ss 13:38 0:01 /usr/lib/syste
- 各列的解释
- USER:进程的用户。
PID:进程的ID。
%CPU:进程占用的CPU百分比。
%MEM:占用内存的百分比。
VSZ:该进程使用的虚拟内存量(KB)。
RSS:该进程占用的物理内存量(KB)。
TTY:启动进程的终端名。不是从终端启动的进程则显示为:?
STAT:该行程的状态(D:不可中断的休眠状态;R:正在运行状态;S:处于休眠状态,可被唤醒;T:停
止状态,可能是在后台暂停或进程处于跟踪调试状态;Z:僵尸进程,进程已经中止,但是部分程序还在内存
当中)。
START:该进程被触发启动时间。
TIME:该进程实际使用CPU运行的时间。(大部分运行时间快所以显示0:00)
COMMAND:进程的启动命令(名称与参数)。
- USER:进程的用户。
- 各列的解释
-
ps -elf
- F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 47751 ep_pol 13:38 ? 00:00:01 /usr/lib/systemd/systemd --s - 各列的解释
- F:内核分配给进程的系统标记。
S:进程的状态(D:不可中断的休眠状态;R:正在运行状态;S:处于休眠状态,可被唤醒;T:停
止状态,可能是在后台暂停或进程处于跟踪调试状态;Z:僵尸进程,进程已经中止,但是部分程序还在内存
当中)。
UID:启动这些进程的用户。
PID:进程的进程ID。(0为没有父进程)
PPID:父进程的进程号(如果该进程是由另一个进程启动的)。
C:进程生命周期中的CPU利用率。
PRI:进程的优先级(越大的数字代表越低的优先级)。
NI:谦让度值用来参与决定优先级。
ADDR:进程的内存地址。
SZ:假如进程被换出,所需交换空间的大致大小。表示进程当前占用的虚拟内存大小。
WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名。
STIME:进程启动时的系统时间。
TTY:进程启动时的终端设备。(拓展:表示一个终端PTS/1)
TIME:运行进程需要的累计CPU时间。
CMD:进程的启动命令。
- F:内核分配给进程的系统标记。
- F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
②top命令(查看进程动态信息)
top
命令是一个在 Unix 和 Linux 系统中常用的实时系统监视工具,它能够显示系统中各个进程的资源占用情况,包括 CPU 使用率、内存使用率等。通过 top
命令,用户可以快速了解系统的整体运行状态和资源消耗情况。
输出示例:
-
头部信息:
top - 14:08:45 up 2:34, 3 users, load average: 0.08, 0.12, 0.09
14:08:45
:当前时间。up 2:34
:系统已运行时间为 2 小时 34 分钟。3 users
:当前有 3 个用户登录。load average: 0.08, 0.12, 0.09
:过去 1 分钟、5 分钟和 15 分钟的平均负载。
-
进程和 CPU 信息:
Tasks: 123 total, 1 running, 122 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.0 us, 0.5 sy, 0.0 ni, 98.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
Tasks
:系统中的进程总数、运行中的进程数、睡眠中的进程数、已停止的进程数和僵尸进程数。%Cpu(s)
:CPU 使用情况,包括用户进程占用的百分比(us)、系统进程占用的百分比(sy)、空闲时间(id)等。
-
内存信息:
MiB Mem : 8161.4 total, 1024.0 free, 2416.8 used, 4720.6 buff/cache MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 5768.3 avail Mem
MiB Mem
:物理内存总量、空闲内存、已使用内存和缓冲/缓存内存。
③pgrep命令
pgrep是一个用于查找进程ID(PID)的命令行工具它可以根据进程的名字或其他属性来查找对应的PID。pgrep命令通常与其他命令一起使用,如 kill 命令。
常用选项:
-a 显示进程名和 PID;
-c 仅显示匹配进程的数量,而不显示进程名和 PID
-f 匹配进程名及其参数;
④jobs命令
jobs命令可以用于列出这些后台进程的状态信息。
-l 显示所有后台进程的 PID;
-p 显示所有后台进程的进程组 ID;
-n 仅显示最近的后台进程;
-r 仅显示正在运行的后台进程;
-s 仅显示已停止的后台进程。
2.控制进程
9进程的启动方式
手工启动
- 前台启动:用户输入命令,直接执行程序
- 后台启动:在命令行尾加入”&”符号
- 调度启动:定时启动程序
2)进程的前台调度
Ctrl+Z组合键
将当前进程挂起,即调入后台并停止执行
jobs命令
jobs [-l] 查看处于后台的任务列表
fg命令
将后台进程恢复到前台运行,可指定任务序号
3)终止进程的运行
Ctrl+C组合键
中断正在执行的命令
kill、killall命令
kill 用于终止指定PID号的进程
killall 用于终止指定名称相关的所有进程
-9 选项用于强制终止
pkill命令
根据特定条件终止相应的进程
常用命令选项
-U:根据进程所属的用户名终止相应进程
3.at一次性任务设置
at
命令是一个在 Unix 和 Linux 系统中用于在指定时间执行一次性任务的命令
以下是 at
命令的一些常用选项和参数:
-
基本用法:
at 时间
例如,
at 14:30
将在 14:30 执行后续输入的命令。 -
指定日期和时间:
at 14:30 12/31/2022
例如,
at 14:30 12/31/2022
将在 2022 年 12 月 31 日 14:30 执行后续输入的命令。 -
从文件读取任务:
at -f 文件名 时间
例如,
at -f /path/to/script.sh 14:30
将在 14:30 执行/path/to/script.sh
文件中的命令。 -
指定用户:
at -u 用户名 时间
例如,
at -u root 14:30
将以 root 用户的身份在 14:30 执行后续输入的命令。 -
查看待执行任务:
atq
例如,
atq
将显示所有待执行的任务。 -
删除待执行任务:
atrm 任务编号
例如,
atrm 3
将删除编号为 3 的待执行任务。
4.crontab周期性任务设置
crontab
是一个在 Unix 和 Linux 系统中用于设置周期性被执行的任务的命令
以下是 crontab
命令的一些常用选项和参数:
-
列出当前用户的定时任务:
crontab -l
这将列出当前用户的所有定时任务。
-
编辑当前用户的定时任务:
crontab -e
这将打开一个编辑器,允许你编辑当前用户的定时任务。编辑完成后,保存并退出编辑器,新的定时任务将被保存。
-
删除当前用户的定时任务:
crontab -r
这将删除当前用户的所有定时任务。
-
指定用户的定时任务:
crontab -u 用户名 -l crontab -u 用户名 -e crontab -u 用户名 -r
这些命令允许你查看、编辑或删除指定用户的定时任务。需要注意的是,你需要具有相应的权限才能操作其他用户的定时任务。
关于定时任务的格式,它由 6 个字段组成,分别表示分钟、小时、日期、月份、星期几和要执行的命令。字段之间用空格分隔。以下是一些示例:
* * * * * command
:每分钟执行一次command
。0 2 * * * command
:每天凌晨 2 点执行一次command
。0 0 * * 1 command
:每周一凌晨 0 点执行一次command
。