Linux精简进程和计划任务管理(九)

1.进程和计划任务管理

1.1程序和进程的关系

程序:
保存在硬盘、光盘等介质中的可执行代码和数据;
静态保存的代码

进程:
在 CPU 及内存中运行的程序代码;
动态执行的代码;
父、子进程;
每个父进程可以创建一个或多个进程。

1.2 静态ps命令查看进程信息 ps aux和ps -elf

是Linux系统中最为常用的进程查看工具,主要用于显示包含当前运行的各进程完整信息的静态快照,通过不同的命令选项,可以有选择性的查看进程信息。
在实际工作中一般加上grep等管道符号来查找正在运行的进程看看程序是否启动

1.2.1 ps -aux(将以简单列表形式显示出进程信息,“-”可写可不写):

其中各字母含义如下。
a:查看系统当中的所有进程
u:代表指定用户
x:该用户在所有终端下的进程(tty终端,ps/0远程终端)
在这里插入图片描述
1、USER:用户
2、PID:进程号(ls -l | grep init可以看到init的软链接,1进程为init)
3、%CPU:进程的cpu占用率
4、%MEM:进程的内存占用率
5、VSZ:虚拟内存占用
6、RSS:物理内存占用
7、TTY:终端(?代表未知,大多为本地)
8、STAT:当前进程状态,其中“S”:可中断休眠进程,“D”:不可中断休眠进程,“s”:父进程,“<”:代表优先级高,“N”:代表优先级低,“R”:代表正在运行的进程,“I”:多线性进程,“Z”:僵尸进程,“+”:前台进程。
9、START:启动时间
10、TIME:进程占用cpu的总时间
11、COMMAND:进程的名称

1.2.2 ps -elf(将以长格式显示系统中的进程信息):

其中各字母含义如下:
e:当前系统内的所有进程信息
l :使用长格式显示进程信息
f :使用完整的格式显示进程信息
在这里插入图片描述

1、F:内核分配给进程的系统标记
2、S: PID:进程的进程ID。
3、UID :启动这些进程的用户。
4、PID:进程的进程ID
5、PPID:当前进程的父进程
6、C :进程生命周期中的CPU利用率
7、PIR:用户态(人可以进行交互额)优先级
8、NI:内核态优先级(-20~19,数值越低优先级越高)
9、ADDR:-代表正在运行
10、SZ:占用swap交换分区的容量
11、WCHAN:当前进程内核态的名称
12、CMD:命令名称

1.2.3 僵尸进程

一个进程结束了,但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程,因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init来接管它,成为它的父进程,子进程退出后init会回收其占用的相关资源。
但是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。
如何杀死僵尸进程?
僵尸进程用kill命令是无法杀掉的,但是我们可以结果掉僵尸进程的爸爸,僵尸daddy挂了之后,僵尸进程就成了孤儿进程,孤儿进程不会占用系统资源,会被init程序收养,然后init程序将其回收。
1.查看所有R相关的进程
2.查看僵尸进程的父进程
3.杀死僵尸进程对应的父进程
4.僵尸进程被回收

1.3 动态top命令查看进程排名信息

1.3.1 top命令:

输入top 之后可以按以下指令进行动态显示
P:根据CPU使用百分比大小进行排序
M:根据驻留内存大小进行排序
N:根据启动时间进行排序
c:切换显示命令名称和完整命令行
h:可以获得top程序的在线帮助信息
k:根据提示输入指定进程的PID号并按Enter键终止对应的进程
q:退出CPU个数和状态
1:显示CPU个数和状态
如下图所示:
在这里插入图片描述
红色框中的五行内容分别为:
第一行是任务队列信息:

  • 15:19:46 表示此刻的系统时间
  • up 6:09 表示系统已运行时常
  • 1 user 当前登录用户数
  • load average 0.00 0.01 0.05 系统负载,即单位时间内系统处理的任务书,后面三个数值分别为1分钟,5分钟,15分钟前到现在的平均值

第二行为进程信息
在这里插入图片描述

扫描二维码关注公众号,回复: 12776918 查看本文章
  • 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 可用物理空间

1.4 pgrep 命令

根据特定条件查询进程PID 信息
1.pgrep -l “xxx”
-l :显示进程名,缺省时只输出PID号
-U: 指定特定的用户
-t:指定终端

这里在xshell中 运行vim 进入ens33 网卡修改
在这里插入图片描述

再打开一个会话,输入 pgrep -l ‘‘vim’’ 和 pgrep ‘‘vim’’ 可以得到如下图结果:
在这里插入图片描述
可以看到加入-l 可以显示进程的命令名。

在这里插入图片描述

1.5 查看进程树 pstree

pstree命令–以树形结构列出进程信息
pstree -aup
-a:显示完整信息
-u:列出对应用户名
-p:列出对应PID
在这里插入图片描述

2.进程的启动方式

2.1手工启动

  • 前台启动:用户输入命令,直接执行程序
    我们目前使用命令就是如此
  • 后台程序:在命令行尾加入“&”符号
    加入&后,命令可以继续在后台执行,不影响继续操作。
    在这里插入图片描述

在这里我直接复制比较大的镜像文件时,直接执行,因为比较大,不可能立马完成,所以很长一段时间都无法进行操作。

在这里插入图片描述

所以此刻,我把复制镜像文件放在后台处理,这样大大增加了使用效率

2.2 进程的前后台调度:

2.2.1 Crtl +Z 组合键

将当前进程挂起,即调入后台并停止执行

2.2.2 jobs [-l]

查看处于后台的任务列表

2.2.3 fg命令

将后台进程恢复到前台运行,可指定任务序号
这里我们用复制cp命令来复制一个大的镜像文件,并且实验挂起和恢复.

  • cp /dev/cdrom myrain.iso
    这里复制cdrom 镜像文件到 myrain.iso里
  • 按CTRL+ Z键挂起
  • 输入 jobs -l
    看目前进程情况,看到cp 任务已停止状态
  • 输入fg 1 恢复 目前标号为1 的进程
    可以看到cp 任务又继续进行了
    在这里插入图片描述

2.3 终止进程的运行

2.3.1Ctrl+C组合键

  • 中断正在执行的命令

2.3.2kill、killall命令

  • kill用于终止指定PID号的进程
  • killall用于终止指定名称相关的所有进程
  • -9选项用于强制终止

在这里插入图片描述
这里我强制kill 两个进程。

2.3.3 pkill命令

  • 根据特定条件终止进程
  • 常用命令选项
    -U:根据进程所属的用户名终止相应进程
    -t:根据进程所在的终端终止相应进程
    在这里插入图片描述

2.4 调度启动

2.4.1使用at 命令

设置一次性计划任务

at [HH:MM] [yyyy-mm-dd](这里“[ ]”如果不加的话默认用当前时间。)
atq:查看当前所有未执行的at任务
atrm + atq中对应的编号 :表示删除对应的at任务

在这里插入图片描述
这里设置了2个at定时任务
1.在2020-11-31 19:50的时候把root相关的进程数量覆写(用的“>”这个符号表示覆写)入ps.root这个文件,我们通过cat /tmp/ps.root 就能看到了结果1是156个进程数量
2.在19:51 的时候创建了一个目录,也是能够查看的到的。

以下演示atq和atrm指令
在这里插入图片描述

2.4.2 crontab命令,设置周期性计划任务

crontab命令
●按照预先设置的时间周期(分钟、小时、天、月、周)
重复执行用户指定的命令操作
●属于周期性计划任务
●主要设置文件
◆ 全局配置文件,位于文件:/etc/crontab
◆ 系统默认的设置,位于目录:/etc/cron.*/
◆ 用户定义的设置,位于文件:/varlspool/cron/用户名
命令:
crontab -e [-u 用户名] -----编辑计划任务
-u缺省时默认是当前用户

crontab -l [-u 用户名] ------查看计划任务

crontab -r [-u 用户名] -------删除计划任务

crontab 任务配置的格式
在这里插入图片描述

字段 说明
分钟 0~59分之间任意整数
小时 0~23小时之间任意整数
日期 1~31日之间任意整数
月份 1~12月之间任意整数
星期 0~7之间任意整数,0和7都代表星期日
命令 需要执行命令或者程序脚本

2.4.3 时间数值的特殊表示方法

●* 表示该范围内的任意时间
●,表示间隔的多个不连续时间点
●- 表示一个连续的时间范围
●/ 指定间隔的时间频率
例子:
0 17 * * 1-5
表示每周一到周五的17:00
50 10 * * 2,3,5
表示:每周二,三,五的10点50分
18 9 */4 */2 *
表示:每隔两月才开始的每四天的9点18分
0 * */2 * *
表示:每两天执行一次

在这里插入图片描述
这里的>>表示追加的意思,放在第二行而不是覆写。

猜你喜欢

转载自blog.csdn.net/weixin_44324367/article/details/110387996