当前位置: 首页 > news >正文

Linux的进程管理与监控和任务工具crontab的使用

一、Linux的进程简介与监控

 1.1、Linux的进程简介

Linux的进程简介与分类
进程的的基本定义是指【在自身的虚拟地址空间运行的一个独立的程序,从操作系统的角度来看,所有在系统上运行的东西,都可以称为一个进程】。
Linux进程的分类
系统进程可执行内存资源分配和进程切换等管理工作;且该进程的运行不受用户的干预,即使是root用户也不能干预系统进程的运行。
用户进程

用户进程是指【通过执行用户程序、应用程序或内核之外的系统程序而产生的进程,此类进程可以在用户的控制下运行或关闭】。

《1》交互进程:由一个shell终端启动的进程,在执行过程中,需要与用户进行交互操作,可以运行于前台,也可以运行在后台。

《2》批处理进程:该进程是一个进程集合,负责按顺序启动其他的进程

《3》守护进程:守护进程是一直运行的一种进程,经常在linux系统启动时启动,在系统关闭时终止。例如httpd进程,一直处于运行状态,等待用户的访问。(如经常用的crond进程,这个进程类似与windows的计划任务,可以周期性的执行用户设定的某些任务)。

 1.2、Linux进程的监控与管理

        在Linux系统中,进程ID(用PID表示)是区分不同进程的唯一标识,它们的大小是有限制的,最大ID为32768,用UID和GID分别表示启动这个进程的用户和用户组。所有的进程都是PID为1的init进程(Centos7.x版本是systemd进程)的后代。内核在系统启动的最后阶段启动init进程,因此这个PID为1的init进程是Linux下所有进程的父进程,用PPID表示父进程。

Linux进程管理的常用命令
序号进程管理的常用命令说明
1ps

ps命令允许你显示正在运行的进程信息(会生成一个执行命令时正在运行的快照静态列表)

#1-显示系统中所有进程的信息(包含进程所占用的cpu、内存占用比例)
ps aux#2-可结合重定向将当前查询到的全部进程信息导出到指定路径文件中
ps aux > /data/processinfo.txt#3-查看所有进程信息
ps -ef
#3.1-查看指定进程的信息(ps -ef | grep 进程名称)
ps -ef | grep ssh#4-查看指定用户的进程信息(ps -u 用户名称)
ps -u coffeemilk#5-结合管道符与sort命令,依据处理器使用量(第三列)情况降序排序的所有进程信息
ps aux | sort -rnk 3#6-结合管道符与sort命令,依据内存使用量(第四列)情况降序排序的所有进程信息
ps aux | sort -rnk 4

2top

top可以实时显示Linux正在运行的进程信息

(还可以设置top命令实时显示正在运行进程的内容,按下[f]键进入设置模式,使用山下箭头移动光标,按下【space 空格】键表示使用该内容,按下【q】表示保存设置并退出)

3lsof

lsof(List Open Files)命令可列出哪些进程打开了哪些文件

lsof命令参数说明
序号lsof参数说明
1-d显示指定文件描述符的文件
2-u显示指定用户打开的文件
3-c显示指定程序打开的文件
4-p显示指定进程打开的文件
5-i显示所有网络连接
6-n显示ip地址,但不进行域名解析
7-l显示登录用户名称
8+D显示指定目录下打开的文件
9-a显示多条件的租户
#1-查看指定用户打开的文件(lsof -u 用户名称)
lsof -u coffeemilk#2-查看所有网络连接
lsof -i
#2.1-查看指定网络端口文件(lsof -i :端口号)
lsof -i :323
#2.2-查看指定网络协议的所有连接(lsof -i 协议)
lsof -i tcp
#2.3-查看所有处于监听状态的TCP连接
lsof -i -sTCP:LISTEN
#2.4-查看所有处于建立好连接的TCP
lsof -i -sTCP:ESTABLISHED#3-查看指定程序打开的文件(lsof -c 程序名称)
lsof -c sshd
#3.1-统计指定程序打开文件的数量(lsof -c 程序名称 | wc -l)
lsof -c sshd | wc -l
#3.2-查看指定程序监听的端口(lsof -i -a -c 程序名称)
lsof -i -a -c sshd#4-查看指定进程号打开的文件(lsof -p pid)
lsof -p 3192
#4.1-查看制定进程号监听的端口(lsof -i -a -p PID -n)
lsof -i -a -p 3189 -n#5-查找指定文件的进程(lsof 指定路径的文件)
lsof /usr/sbin/sshd#6-查找使用指定目录的进程(lsof +D 指定目录)
lsof +D /var/log

一、FD(文件描述符)是用来访问文件或输入输出资源的抽象标识,有如下八种表现形式:

《1》数字(如:0【表示标准输入STDIN】、1【表示标准输出STDOUT】、2【表示标准错误输出STDERR】);

《2》cwd:表示当前工作目录;

《3》rtd:表示根目录;

《4》txt:表示程序代码;

《5》mem:表示内存映射文件;

《6》数字w:(如:6w)表示文件是以写入模式打开的;

《7》数字u:(如:6u)表示文件是以读写模式打开的;

《8》数字r:(如:6r)表示文件是以读模式打开的;

二、TYPE(文件类型)是有关打开文件的类型,可能包括但不限于如下八种类型:

《1》REG:表示常规文件(即:普通数据文件);

《2》DIR:表示目录;

《3》CHR:表示字符设备文件(如:终端、打印机等);

《4》BLK:表示块设备文件(如:硬盘、光驱等);

《5》FIFO:表示命名管道(用于进程间通信);

《6》SOCK:表示Socket文件(用于网络通信);

《7》IPV4\IPV6:表示IPV4或IPV6网络文件;

《8》unix:表示unix域或Socket文件;

三、特殊文件,一般包含如下三种:

《1》设备文件:若是字符块设备或文件则最后的NAME列会显示设备文件的路径(如:/dev/tty(终端设备)或/dev/sdb1(硬盘分区));

《2》命名管道:通常显示为pipe:[inode]([inode]是管道文件的inode编号);

《3》Socket文件:连接显示本地地址及其端口号(格式如:[local address]:[local port]->[remote address]:[remote port])

4pgrep

pgrep(process global regular expression print)其功能是用于检索程序进程PID编号;它是通过正则表达式进行检索的,因此用户只需要输入服务名称中的一部分即可进行搜索,对于不记得全名的服务程序十分有用

#0-查看pgrep名称的帮助
pgrep -h#1-查看指定程序名称对应的进程PID(pgrep 进程名称)
pgrep sshd#2-查看指定程序名称对应的进程PID和名称
pgrep -l sshd#3-查看指定程序名称对应的进程PID、名称和文件
pgrep -a sshd#4-查看匹配指定程序名称对应的所有进程PID
pgrep -f sshd#5-查看匹配指定程序名称对应的所有进程PID、名称和文件
pgrep -fa ssh#6-查看匹配指定程序名称对应的所有进程PID且将这些PID用设置的特殊符号分割为一行输出
pgrep -d , ssh

5kill

kill命令的功能是杀死或结束进程。

kill命令的语法是 kill [信号类型] 进程PID

信号类型有很多种,可以通过【kill –l】查看所有信号类型。常用的信号类型有SIGKILL,对应的数字为9,还有SIGTERM和SIGINT,对应的数字分别为15和2。
《1》kill -9 进程PID:表示强制结束进程,会立即释放该进程程序对应的资源内容;
《2》kill -2 进程PID:表示结束进程,但是并不是强制性的,常用的ctrl+c组合键发出的就是一个kill -2的信号;
《3》kill -15 进程PID:表示正常结束进程,是kill的缺省选项,也就是kill不加任何信号类型时,默认类型就是15。

注意:这里使用kill命令杀死进程的时候需要杀父进程(一般杀死编号最小的那个,且编号都是连续的)才有用,杀子进程后程序一般会另起一个对应的子进程(会导致子进程的编号不连续)【查看子进程编号不连续也可以大致判断出这个程序的子进程出过问题】。

6killall

killall也是杀死或结束进程的命令(与kill不同的是,killall后面跟的是进程的名字,而不是进程的PID,因而,killall可以终止一组进程)。

killall的语法是 killall [信号类型] 进程名称

《1》信号类型:与kill命令中信号类型的含义相同。
《2》进程名称:进程对应的名称,例如java、httpd、mysqld、sshd、sendmail、nginx等

命令执行后,可以使用【echo $?】来查看刚刚执行的命令是否执行成功,若命令执行成功则显示0;否则就是执行失败

二、任务调度进程crond的简介与使用

 2.1、任务调度进程crond简介

任务调度进程crond的简介与分类

crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似

Linux下的任务调度分为【系统任务调度】和用【户任务调度】。

1系统任务调度

系统任务调度的配置文件是【/etc/crontab】

系统周期性所要执行的工作(如:写缓冲数据到硬盘、日志清理等周期性操作)。

2用户任务调度

用户自定义的调度任务文件都在【/var/spool/cron/】目录中,其文件名与用户名一致。

用户定期要执行的工作(如:用户数据备份、定时邮件提醒等周期性操作),用户可以使用 crontab 工具来定制自己的计划任务。

#查看crond服务的运行状态
systemctl status crond.service#停止crond服务
systemctl stop crond.service#启动crond服务
systemctl start crond.service #重启crond服务
systemctl restart crond.service

 2.2、自定义计划任务工具crontab使用

自定义计划任务工具crontab

crontab常用的使用格式:

crontab [-u user] [file] 
crontab [-u user] [-e|-l|-r |-i]

序号常用选项说明
1-u user用来设定某个用户的crontab服务(“-u coffeemilk”表示设定coffeemilk用户的crontab服务,此参数一般由root用户来运行)
2filefile是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
3-e

编辑某个用户的crontab文件内容。

注意:若不指定用户,则表示编辑当前用户的crontab文件。

4-l

显示某个用户的crontab文件内容。

注意:若不指定用户,则表示显示当前用户的crontab文件内容。

5-r

从/var/spool/cron目录中删除某个用户的crontab文件。

注意:若不指定用户,则默认删除当前用户的crontab文件。

6-i在删除用户的crontab文件时给确认提示

常用组合:
《1》crontab -e 

《2》crontab -l

#注意:如下命令生成的定时调度任务文件是存在【/var/spool/cron/】路径下,每个用户对应生成自己用户名称的文件(如:root用户的定时调度文件路径是【/var/spool/cron/root】)
#1-新增或编辑当前用户下的定时调度任务命令
crontab -e#2-查看当前用户下的定时调度任务命令
crontab -l#3-新增或编辑指定用户下的定时调度任务命令(crontab -r 用户名称 -e)
crontab -r coffeemilk -e#4-查看指定用户下的定时调度任务命令(crontab -r 用户名称 -l)
crontab -u coffeemilk -l#5-查看定时调度任务的执行日志(查看最新10条日志数据)
tail -f /var/log/cron
crontab文件解析

用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段。crontab文件每行的格式如下:

minute   hour   day   month   week   command

序号crontab格式说明
1minute分钟,可以是从0到59之间的任何整数。
2hour小时,可以是从0到23之间的任何整数。
3day日期,可以是从1到31之间的任何整数。
4month月份,可以是从1到12之间的任何整数。
5week星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
6command要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

在以上各个字段中,还可以使用以下特殊字符:

《1》星号(*):代表所有可能的值(如:month字段若是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作)。
《2》逗号(,):可以用逗号隔开的值指定一个列表范围(如:“1,2,5,7,8,9”)。
《3》中杠(-):可以用整数之间的中杠表示一个整数范围(如:“2-6”表示“2,3,4,5,6”)。
《4》正斜线(/):可以用正斜线指定时间的间隔频率(如:“0-23/2”表示每两小时执行一次)。同时正斜线可以和星号一起使用,例(如:*/10,若用在minute字段,表示每十分钟执行一次)。

#crontab文件定时调度任务的示例#1-每隔3个小时重启apache服务一次
0 */3 * * * /usr/local/apache2/apachectl restart#2-每周六的3点30分执行/webdata/bin/backup.sh脚本的操作
30 3 * * 6 /webdata/bin/backup.sh#3-每个月的1号和20号的0点0分检查/dev/sdb8磁盘设备
0 0 1,20 * *  fsck /dev/sdb8#4-每个月每隔5天(5号、10号、15号、20号、25号、30号)的5点10分执行清理apache日志操作
10 5 */5 * *  echo "">/usr/local/apache2/log/access_log
#crontab文件中的定时调度时间常用设置示例
* * * * * 每分钟运行一次 cron 任务。
0 * * * * 每小时运行一次 cron 任务。
0 0 * * * 每天0点0分运行 cron 任务。
0 2 * * * 每天凌晨 2 点运行 cron 任务。
0 0 15 * * 每个月 15 日0点0分运行一次 cron 任务。
0 0 * * 6 每周六0点0分运行 cron 任务。
0 15 * * 1-5 每周一到周五每天下午 3 点运行 cron 任务。
*/5 * * * * 每 5 分钟运行一次 cron 任务。
0 8-16 * * * 每天从上午 8 点到下午 4 点准时执行 cron 任务。
0 6 * * 2,4 每周二和周四凌晨 6 点运行 cron 任务。

 2.3、任务调度工具crontab的注意事项 

使用crontab工具的注意事项
序号注意事项说明
1环境变量问题

有时我们创建了一个crontab,但是这个任务却无法自动执行,而手动执行这个任务却没有问题,这种情况一般是由于在crontab文件中没有配置环境变量引起的。

解决方法:(在我们需要定时调度的任务配置环境)

#1-在定时任务文件中配置的全局环境变量内容
source /etc/profile#2-配置某个用户的环境变量内容(source /用户名称/.bashrc)
source /coffeemilk/.bashrc
2清理系统用户的邮件日志

用户的邮件日志是在【/var/mail】目录下,对应用户名称的文件中。

若命令不在shell终端的前台显示输出信息,而是在后台运行,那么该命令运行的信息会输出到【/var/mail】目录下,对应用户名称的文件中,若不清理则该日志文件会越来越大:

可以在crontab文件中设置如下形式,忽略日志输出:
0 */3 * * * /usr/local/apache2/apachectl restart >/dev/null 2>&1

3

【系统级任务调度】

与【用户级任务调度】

系统级任务调度主要完成系统的一些维护操作(如:定时重启机器);

用户级任务调度主要完成用户自定义的一些任务,可以将用户级任务调度放到系统级任务调度来完成(不建议这么做),但是反过来却不行。

三、其他资料

Linux系统必学的基础操作命令——快速上手Linux(上)-CSDN博客https://coffeemilk.blog.csdn.net/article/details/148987685第 24 章 自动执行系统任务 | 系统管理员指南 | Red Hat Enterprise Linux | 7 | Red Hat Documentationhttps://docs.redhat.com/zh-cn/documentation/red_hat_enterprise_linux/7/html/system_administrators_guide/ch-automating_system_taskscron(8) - Linux 手册页https://www.man7.org/linux/man-pages/man8/cron.8.html

http://www.dtcms.com/a/315143.html

相关文章:

  • 臭氧、颗粒物和雾霾天气过程的大气污染物计算 CAMx模型
  • 用思维框架拆解知识,开启高效学习之旅
  • 【基础完全搜索】USACO Bronze 2019 January - 猜动物Guess the Animal
  • RabbitMQ--介绍
  • 498. 对角线遍历
  • JUCE VST AI 开源
  • 2025最好的Dify入门到精通教程(上)
  • 微服务的编程测评系统10-竞赛删除发布-用户管理-登录注册
  • 县级融媒体中心备份与恢复策略(精简版3-2-1架构)
  • 【网络安全】不安全的反序列化漏洞
  • P1550 [USACO08OCT] Watering Hole G
  • 【达梦MPP(带主备)集群搭建】
  • python包管理器uv踩坑
  • Golang中的`io.Copy()`使用场景
  • Java 的 APT(Annotation Processing Tool)机制详解
  • 【MyBatis-Plus笔记】MyBatis-Plus详解
  • JuiceFS on Windows: 首个 Beta 版的探索与优化之路
  • 【多智能体cooragent】CoorAgent 系统中 5 个核心系统组件分析
  • 【笔记】ROS1|3 Turtlebot3汉堡Burger建SLAM地图并导航【旧文转载】
  • 数学 理论
  • 基于FAISS和Ollama的法律智能对话系统开发实录-【大模型应用班-第5课 RAG技术与应用学习笔记】
  • Fastapi文件上传那些事?
  • 浅谈 Python 中的 next() 函数 —— 迭代器的驱动引擎
  • MCP进阶:工业协议与AI智能体的融合革命
  • Neat Converter电子书格式转换工具,支持ePub、Azw3、Mobi、Doc、PDF、TXT相互转换,完全免费
  • 龙虎榜——20250804
  • numpy数组拼接 - np.concatenate
  • VPS云服务器Linux性能分析与瓶颈解决方案设计
  • java获取文件编码格式,然后读取此文件,适用于任何格式的文件。
  • 面试题:怎么理解3 次握手与 4 次挥手:TCP 连接的建立与终止