一、进程管理
进程,线程和协程的联系
程序:计算机可以识别的一串指令或者代码
进程:将代码运行起来
线程:线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。
协程:线程里的,由程序员写的轻量级线程
进程与线程的区别
线程是程序执行的最小单位,进程是操作系统资源分配的最小单位; 一个进程由一个或多个线程组成,它们是单个进程中代码执行的不同路径; 虽然进程之间相互独立,但同一进程下的各个线程共享程序的内存空间(包括代码段、数据集、堆等)和某些进程级资源(如打开文件)。 在共享进程级资源时,进程内的线程对其他进程是不可见的; 调度和切换:线程上下文切换比进程上下文切换快得多。
二、 查看进程
2.1 静态查看进程 —— ps aux/ps -elt
选项:
选项 | 作用 |
a | 显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将示系统中所有的进程信息。 |
u | 使用以用户为主的格式输出进程信息。 |
x | 显示当前用户在所有终端下的进程信息。 |
-e | 显示系统内的所有进程信息。 |
-l | 使用长格式显示进程信息。 |
-f | 使用完整格式显示进程信息 |
名称 | 解释 |
USER | 产生该进程的的用户名称 |
PID | 进程的id,由系统分配 |
%CPU | 该进程占用 CPU 资源的百分比,占用的百分比越高,进程越耗费资源 |
%MEM | 该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源 |
VSZ | 该进程占用虚拟内存的大小,单位为 KB |
RSS | 该进程占用实际物理内存的大小,单位为 KB |
TTY | 该进程是在运行的终端 |
STAT | 进程所处的状态 |
START | 该进程的启动时间 |
TIME | 该进程占用 CPU 的运算时间,注意不是系统时间 |
COMMAND | 产生此进程的命令名 |
补充: STAT所处状态的种类
-D:不可被唤醒的睡眠状态,通常用于 I/O 情况。
-R:该进程正在运行。
-S:该进程处于睡眠状态,可被唤醒。
-T:停止状态,可能是在后台暂停或进程处于除错状态。
-Z:僵尸进程。进程已经中止,但是还是占用硬件资源。
补充二:TTY进行运行的终端
tty1~tty6 是本地的字符界面终端
tty7 是图形终端
ps -elf
列名 | 解释 |
F | 进程标志,说明进程的权限,常见的标志有两个: 1:进程可以被复制,但是不能被执行; 4:进程使用超级用户权限; |
S | 进程状态。具体的状态和"psaux"命令中的 STAT 状态一致; |
UID | 运行此进程的用户的 ID; |
PID | 进程的 ID; |
PPID | 父进程的 ID; |
C | 该进程的 CPU 使用率,单位是百分比; |
PRI | 进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行;系统定义不可以人为修改 |
NI | 进程的优先级,数值越小,该进程越早被执行;可以人为修改 |
ADDR | 该进程在内存的哪个位置; |
SZ | 该进程占用多大内存; |
WCHAN | 该进程是否运行。"-"代表正在运行; |
TTY | 该进程由哪个终端产生; |
TIME | 该进程占用 CPU 的运算时间,注意不是系统时间; |
CMD | 产生此进程的命令名; |
僵尸状态产生的原因:由于父进程比子进程先退出,导致子进程无法被回收,且不能运行而产生的状态
2. 2 查看线程—— ps -aT
2.3 动态查看进程 —— top
选项:
选项 | 作用 |
-d | 指定 top 命令每隔几秒更新。默认是 3 秒 |
-b | 使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中 |
-n | 指定 top 命令执行的次数。一般和"-"选项合用 |
-p | 仅查看指定 ID 的进程 |
-s | 使 top 命令在安全模式中运行,避免在交互模式中出现错误 |
-u | 只监听某个用户的进程 |
在 top 命令的显示窗口中,还可以使用如下按键,进行一下交互操作:
? 或 h:显示交互模式的帮助;
c:按照 CPU 的使用率排序,默认就是此选项;
M:按照内存的使用率排序;
N:按照 PID 排序;
T:按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序;
k:按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号;
r:按照 PID 给某个进程重设优先级(Nice)值;
q:退出 top 命令;
2.4 根据条件查看进程
-U:指定用户
-l:显示进程名
-a:显示完整格式的进程名
-P < PID>:显示指定进程的子进程
-t 查看终端
2.5 树状查看进程——pstree
选项:
-p:显示PID
2.6 查看指定进程 ——prtstat
三、手动控制进程
进程的启动分为前台启动和后台启动
前台启动 :用户输入命令以后,直接在页面中启动该命令
后台启动:当该命令需要的操作过大,占用可终端,导致用户无法再次输入其他命令,将该处理进程放在后台处理,同时可以进行别的操作
3.1 将前台命令进程转入后台——&
3.2 进程的前后台调度
jobs命令:jobs [-l]查看处于后台的任务列表;
不显示进程号
jobs -l 可以显示进程号
fg命令:将后台进程恢复到前台运行,可指定任务序号;
3.3 终止进程的运行kill
Ctrl + C组合键:中断正在执行的命令;
kill、killall命令
kill用于终止指定PID号的进程
killall用于终止指定名称相关的所有进程
-9选项用于强制终止
kill <进程名> //杀死某一进程
kill -9 <PID> //强制杀死
killall <进程名> //杀死全部进程
查看终端信息的命令(who、w、ps aux);
四、计划任务管理
4.1 at命令
一次性计划任务
使用at命令设置的任务只在指定时间点执行一次,若只指定时间则表示当天的该时间,若只指定日期则表示该日期的当前时间;
可以在at交互环境中输入多条命令,最后按Ctrl+D组合键提交;
at [HH:MM] [yyyy-mm–dd]:在特定时间##年##月##日##时##分,设置一次性计划任务;
[root@localhost ~]# atq //查看还未执行的计划
1 Mon Nov 6 18:42:00 2023 a root
[root@localhost ~]# at 1:00 2024-1-1 #在2024-01-1的1:00分设置一次性计划
at> echo 'happy' > /opt/happy.txt
at> <EOT>
job 3 at Mon Jan 1 01:00:00 2024
[root@localhost ~]# atq #查看系统中还未运行的计划
2 Mon Jan 1 00:00:00 2024 a root
3 Mon Jan 1 01:00:00 2024 a root
[root@localhost ~]#
[root@localhost ~]# atrm 2 #删除系统中序号为2的计划
[root@localhost ~]# atq #查看此时系统中还未执行的计划
3 Mon Jan 1 01:00:00 2024 a root
[root@localhost ~]#
4.2 crontab命令
crontab 类似vim编辑器一样打开一个配置文件,向配置文件中写入周期任务。但是写周期任务,需要对使用周期时间进行理解和掌握
选项:
选项 | 作用 |
-u | 用来设定某个用户的 crontab 服务 |
-e | 编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。 |
-l | 显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。 |
-r | 从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件。 |
-i | 在删除用户的 crontab 文件时,给确认提示。 |
编辑任务的格式:
* | 分 | 0~59 |
* | 时 | 0~23 |
* | 天 | 1~31 |
* | 月 | 1~12 |
* | 周 | 0~7(0和7都代表星期日) |
例子:
0 8-18/2 * * * //8点到18点之间每2小时
0 * */3 * * //每3天的每个整点
0 14-18 1,5,15,30 * * // 每个月 1号 ,5 号 ,15号, 30号 下午 2到6点 执行
15-45/5 10,22 */10 10 * // 每年10月每隔10天的上午和下午10点的15-45分内每隔5分钟执行一次
符号 | 作用 |
---|---|
*(星号) | 代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思。 |
,(逗号) | 代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。 |
-(中杠) | 代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。 |
/(正斜线) | 代表每隔多久执行一次。比如"*/10命令",代表每隔 10 分钟就执行一次命令。 |
which 命令 //查看该命令的绝对路径
crontab -e //创建一个周期任务
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
*/1 * * * * /usr/bin/cp /etc/passwd /opt/passwd1 //每隔一分钟复制一份
wq //退出保存
[root@localhost opt]# crontab -l //查看周期任务
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin //定义软件的位置
*/1 * * * * /usr/bin/cp /etc/passwd /opt/passwd1 //把etc下文件复制到opt并改名
[root@localhost opt]#
[root@localhost opt]# ls
happy.txt passwd passwd1 rh
4.3 周期任务的删除
总结
静态查看:ps aux,ps -elf
动态查看:top
查看指定进程:prtstat
以树形结构列出:pstree
at 一次性任务的设定
杀进程时注意 -9 谨慎使用,使用不妥当,会导致数据丢失
周期任务计划要注意周期方法的使用,利用好周期符号,设定先要的执行时段