第九章 进程和计划任务管理【☆】

一个进程可以创建多个子进程,子进程之间相互独立,速度较慢,但是互不影响。线程是共享资源,速度快,但一个线程崩掉其他线程同时崩掉。

一、查看进程信息

1. 查看静态的进程统计信息------ps命令

|----------------------|------------------------------|
| 主要进程状态 ||
| R(running) | 运行状态 |
| S(sleeping) | 可唤醒的睡眠状态 |
| D(disk sleeping) | 不可中断的休眠状态,阻塞状态 |
| Z(zomble) | 僵尸进程,进程已经中止,但是部分程序还在内存当中 |
| T(Stopping) | 停止状态,可能是在后台暂停或进程处于跟踪调试状态 |
| I(Idle) | 空闲状态(不会影响平均负载) |
| X(Dead) | 死亡状态(死亡状态的进程用top命令就不会显示了) |

方法一:ps aux

a:显示现行终端下的所有进程 ,包括其它用户的进程。

u:显示进程的归属用户及内存的使用情况

x:显示所有终端 的进程。

h:不显示标题列。

bash 复制代码
ps -lf -T -p <指定PID>


USER :进程的用户。
PID :进程的ID。
%CPU :进程占用的CPU百分比,占用越高,进程越耗费资源。
%MEM :占用内存的百分比。
VSZ :该进程使用的虚拟内存量KB(进程想要在内存中写入数据,会优先通过虚拟内存地址写入,再映射到对应的物理内存地址。)
RSS :该进程占用的实际物理内存量(KB)。
TTY :启动进程的终端名。不是从终端启动的进程(本机启动)则显示为**?**。
STAT :该进程的状态
START :该进程被启动时间。
TIME :该进程实际使用CPU的时间。
COMMAND:进程的名称与参数。

方法二:ps -elf

F:内核分配给进程的标记

S:进程的状态

UID:运行进程的用户

PID:进程的ID号

PPID:副进程的进程号

C:CPU使用率

PRI:进程的优先级,数值越高,优先级越高,越快被处理
NI:进程的谦让度,数值越高,优先级越低

ADDR:进程所使用的内存地址

SZ:如果使用了swap,则表示在swap交换分区中所占用的大小

WCHAN:睡眠状态下的进程的系统函数

STIME:进程启动的时间

TTY:启动进程的终端,tty1表示本地虚拟终端,pts表示远程终端。

TIME:该进程实际累计使用CPU的时间。
CMD:进程名或运行的命令。

格式:ps [选项] <进程名/PID>

-e:显示系统内的所有进程信息。

-l:使用长格式显示进程信息。

-f:使用完整的格式显示进程信息。

-a:显示现行终端下的所有进程。

-T:查看线程信息。

-C <进程名称>:显示指定进程名的信息。

-p <进程pid>:显示指定pid的进程的信息。

-H:显示树状结构,表示进程间的相互关系。

--no-headers:不显示标题列。

bash 复制代码
ps aux --no-headers | wc -l  #统计进程数量
ps -aT                       #显示所有线程
ps -T -p <PID>               #查看指定进程所有线程的信息
ps -L <PID>                  #查看指定进程中的线程信息

【示例】ps aux --sort -%cpu | head -10 #按cpu(指定指标)降序排列显示前10行(-为降序,+为升序,p与%同义)

【示例】ps aux --sort +pmem | head -n 10 #按内存升序排列显示后10行,效果等于ps aux --sort +%mem | head -n 10

ps aux --sort -pcpu,+pmem | head -n 10 根据CPU降序,内存升序排列(了解)

2. 查看动态的进程统计信息------ top命令

top命令

P 键:根据CPU使用百分比大小进行排序

M 键:根据驻留内存大小进行排序

N 键:根据启动时间进行排序

c 键:切换显示命令名称和完整命令行

h 键:可以获得 top程序的在线帮助信息

k 键:根据提示输入指定进程的 PID 号并按 Enter键终止对应的进程

q 键:退出 top 程序

数字1 键:显示CPU个数和状态

bash 复制代码
top -H           #显示所有线程
top -H -p <pid>  #显示特定进程中的线程

第一行:任务队列信息

11:06:48 #当前系统时间

up 1:22 #系统已运行时长

1 user #当前登录用户数
load average: 0.06, 0.60 , 0.48 #系统负载,即单位时间内系统处理的任务数,后面三个数值分别为1分钟、5分钟、15分钟 前到现在的平均值。值是根据CPU数量决定的,值越高表示CPU负载越高。系统负载值长时间高于CPU数量的70%-80% 以上被认为是异常 的**。load average平均负载高时可能是CPU密集行进程多导致,也可能是等待I/O繁忙导致。**除了top命令,w和uptime命令都可以查看系统负载。

第二行:进程信息

Tasks #总进程数

running #正在运行的进程数

sleeping #休眠的进程数

stopped #中止的进程数

zombie #僵死的进程数

第三行:CPU的信息 (按键盘1可切换到不同cpu)
us #用户应用程序占用cpu时间
sy
#操作系统内核占用cpu时间

ni #优先级调度占用,低nice值具有更高优先级
id #空闲CPU,要了解空闲的 CPU 百分比,主要看100%减%id 部分
wa #I/O 等待占用cpu时间

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 #命令名/命令行

3.查看进程信息的其他命令------pgrep/pstree
pgrep命令

pgrep -l -U <用户名> #根据用户名查询进程

pgrep -l "关键字" #根据++关键字++查询相关的进程

pgrep -l -t <终端> #根据终端查询进程

pstree命令

pstree -aup [用户名] #查询进程信息完整信息,列出对应用户名和PID号

二、查看系统指标的其他命令

CPU: top vmstat sar htop atop

内存:free -m vmstat sar top cat /proc/meninfo

IO:iostat(磁盘级别) iotop(进程级别) vmstat(系统级别) atop sar

磁盘容量:df -h du

进程:ps top htop atop pidstat

网卡流量:ifconfig iftop atop cat /proc/net/dev

yum在线源安装

yum install -y epel-release

yum install -y htop atop iotop iftop

三、运行进程和终止进程

1.开启进程
①手工启动

前台进程:直接输入命令运行

后台进程 :有一些进程操作过程中终端一直挂着,必须完成后才能继续操作别的命令,ctrl+v会终端该进程。此时可以通过在命令后面加个"&"符号,实现后台运行,不影响终端操作别的命令。但是如果终端关闭,后台运行的进程也会随之退出。我们在命令开头位置添加 nohup(格式为nohup 命令 &),可实现后台运行的进程不会随着终端的关闭而自动退出。(命令 run & 可实现命令前台显示。)

② 前后台调度

前台调度:ctrl+z,将前台的进程挂起暂停并调度到后台;

后台调度:jobs -l ,查看挂起的调度到后台的进程列表和序号,可用**fg <序号>**将挂起到后台的进程调度到前台继续运行。

2.终止进程
①ctrl+C

中断正在执行的命令;

②kill / killall

kill <PID> 根据PID号杀掉进程;killall <进程名> 根据进程名杀掉进程。

③pkill命令

pkill -U <用户名> 根据用户名终止进程

pkill <关键词> 根据关键词终止进程

pkill -t <终端> 根据终端踢掉用户

kill的工作原理

kill通过向进程发送信号的方式杀掉进程。常用的选项有:默认情况下kill命令的参数为-15,发送SIGTERM信号,表示告诉进程请自行停止运行并退出,进程可以忽略;kill -9,发送信号SIGKILL,表示进程要立即退出,且不能被捕捉或忽略(生产环境中一般不要使用kill -9,可能会导致进程数据丢失);kill -3 ,发送信号SIGQUIT,表示进程请自行退出,并打印进程各个线程的堆栈信息,保存路径为 /proc/${pid}/cwd进程目录中,文件名为 antBuilderOutput.log记录历史信息;kill -1 ,发送信号 SIGHUP,表示进程重新加载配置文件,不退出。

如何解决删除文件后磁盘空间没有被释放的问题?

①确定进程不是业务进程,直接kill -9杀掉进程释放空间;

①进程占用文件时文件被误删,先lsof | grep delete | grep <被删出的文件>,找到打开文件的进程号PID;②cd /proc/ ---> cd 进程目录中,cd fd ---> ll 查看到被删除的文件;③cp 3 /指定路径,恢复被误删的文件;④echo > 文件名,覆盖空字符从而释放磁盘空间。

3.计划任务设置
①设置一次性计划任务------at命令

at HH:MM [YYYY-MM-DD] ---> 输入命令 ---> ctrl + d 提交任务 ---> atp查看没执行的任务列表和序号 ---> atrm <序号> 删除指定的任务

②设置周期性计划任务------crontab命令

要设置cront周期计划任务,首先确保系统已开启crond服务 ,crontab -e [-u root]指定用户创建计划任务,自动对应文件:/var/spool/cron/用户名。

|--------------|-------|-------|-------|-------|-------|---------|
| 格式各部分的意义 | | | | | | 命令 |
| 数字范围 | 0~59 | 0~23 | 1~31 | 1~12 | 0~7 | 需要执行的命令 |
| ps:周的数字为 0 或 7 时,都代表"星期天"的意思; * 表示任意时间点;表示多个不联系的时间点;- 表示连续的时间点;**/**表示间隔的时间频率 |||||||

bash 复制代码
crontab -l [-u 用户名]  #查看计划任务
crontab -e              #dd删除,修改计划任务
crontab -r              #清空计划任务列表

方法一:

|------|-----------------------------------------------|---------------------------------------------------------------------|
| | 命令 | 含义(以ls命令为例) |
| 示例1 | 5 * * * * ls | 每小时的第5分钟执行一次ls命令 |
| 示例2 | 30 5 * * * ls | 每天的 5:30 执行ls命令 |
| 示例3 | 30 7 8 * * ls | 每月8号的7:30分执行ls命令 |
| 示例4 | 30 5 8 6 * ls | 每年的6月8日5:30执行ls命令 |
| 示例5 | 30 5 8 6 * ls | 每年的6月8日5:30执行ls命令 |
| 示例6 | 30 6 * * 0 ls | 每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。 |
| 示例7 | 30 3 10,20 * * ls | 每月10号及20号的3:30执行ls命令[注:","用来连接多个不连续的时段 |
| 示例8 | 25 8-11 * * * ls | 每天8-11点的第25分钟执行ls命令[注:"-"用来连接连续的时段 |
| 示例9 | */15 * * * * ls | 每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 |
| 示例10 | 30 6 */10 * * ls | 每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls命令。 |
| 示例11 | 22 10,22 * * 1-5 \cp -f -r /var/log/ /opt/ | 每个工作日的早10点22分和晚10点22分都执行cp这个命令,cp是'cp -i'的别名,前面需要加反斜杠 |

方法二:

echo '30 7 * * 6 /usr/bin/systemctl httpd restart' >> /var/spool/cron/root 添加任务

相关推荐
Yana.nice15 分钟前
openssl将证书从p7b转换为crt格式
java·linux
AI逐月20 分钟前
tmux 常用命令总结:从入门到稳定使用的一篇实战博客
linux·服务器·ssh·php
想逃离铁厂的老铁21 分钟前
Day55 >> 并查集理论基础 + 107、寻找存在的路线
java·服务器
小白跃升坊1 小时前
基于1Panel的AI运维
linux·运维·人工智能·ai大模型·教学·ai agent
跃渊Yuey1 小时前
【Linux】线程同步与互斥
linux·笔记
杨江1 小时前
seafile docker安装说明
运维
舰长1151 小时前
linux 实现文件共享的实现方式比较
linux·服务器·网络
好好沉淀1 小时前
Docker开发笔记(详解)
运维·docker·容器
zmjjdank1ng1 小时前
Linux 输出重定向
linux·运维
路由侠内网穿透.1 小时前
本地部署智能家居集成解决方案 ESPHome 并实现外部访问( Linux 版本)
linux·运维·服务器·网络协议·智能家居