进程:指的是我们执行程序时,我们程序运行的一个顺序,因为我们的系统每次之运行一个程序
进程定义:正在执行的程序,会占用cpu和内存资源
常用格式:
ps ax #显示所有进程
这个命令会列出系统中所有进程的相关信息,包括进程的 ID(PID)、终端(TTY)、状态(STAT)、运行时间(TIME)以及命令(COMMAND)等信息
在使用 ps ax 命令查看进程列表后,TTY中可能出现的常见显示包括:
在使用 ps ax 命令查看进程列表后,STAT 中可能出现的常见显示包括:
ps axuf #显示所有进程,并列出执行进程用户,以及进程间父子关系
这条命令用于显示详细的进程信息,包括用户(USER)、进程 ID(PID)、CPU 占用率(%CPU)、内存占用率(%MEM)、虚拟内存大小(VSZ)、实际内存大小(RSS)、终端(TTY)、进程状态(STAT)、启动时间(START TIME)、累计 CPU 时间(TIME)和命令(COMMAND)等
ps elf #同ps axuf
显示内容包括字段 F(标志), UID(用户ID), PID(进程ID), PPID(父进程ID), PRI(优先级), NI(进程的nice值), VSZ(虚拟内存大小), RSS(常驻集大小), WCHAN(进程睡眠时所在的内核函数), STAT(进程状态), TTY(终端设备), TIME(累计CPU时间), COMMAND(命令)等
在使用 ps -elf 命令时,STAT 列显示的是进程的状态,常见的几种显示方式及其代表的意思包括:
PS axuf与ps elf区别:
ps axuf 能够以树状结构显示进程之间的关系,而 ps elf 则更注重以列表形式显示进程的详细信息。具体选择哪种命令取决于你需要查看的进程信息的深度和方式
按M,以内存占用情况排名
按P,以cpu占用情况排名,默认显示
按q退出显示
PID:进程ID
USER:运行该进程的用户
PR:进程的优先级
NI:进程的nice值
VIRT:进程使用的虚拟内存量
RES:进程使用的物理内存量(常驻集大小)
SHR:进程使用的共享内存量
S:进程状态
%CPU:进程占用CPU的使用率
%MEM:进程占用内存的使用率
TIME+:进程累计CPU时间
COMMAND:进程的命令名称
pgrep httpd #只显示进程号
pgrep -l httpd #显示进程名及进程号
例:
前台启动: 命令
后台启动: 命令 &
jobs 显示后台任务
示例命令:cat /dev/zero > /dev/null
补充:前后台调度:
前台命令 --->ctlr+z---> 后台挂起
bg 任务号 后台运行
fg 任务号 调入前台
以vim /etc/fstab 为例演示
此命令是最基本的进程终止工具。通过指定进程号(PID),可以向指定的进程发送信号来终止该进程
此命令允许你通过进程名终止多个进程,而不需要知道它们的 PID。你可以提供进程名作为参数并选择发送特定信号(如 -9)来终止匹配的所有进程
-t 终端号
-u 登录用户名
以上两个选项都可以结束终端运行
pkill 命令与 killall 类似,也可以通过进程名来终止进程。不同之处在于,pkill 提供了更多的灵活性,可以使用更多的匹配模式来选择要终止的进程,比如正则表达式
总的来说,kill
是针对单个进程号的操作,killall
是根据进程名批量终止进程,而 pkill
则提供更多的匹配选项。在实际使用中,可以根据具体情况选择合适的命令来终止进程。需要注意的是,在使用 -9
选项时要谨慎,因为 SIGKILL 会强制终止进程,可能会导致数据丢失或其他问题
Ctrl+c 终止前台当前进程
计划任务:计划任务是指未来我们准备在系统中进行的操作通过脚本的方式在规定的时间内自动执行,可以多次进行执行
计划任务
设置格式:
at [HH:MM ] [yyyy-mm-dd]
at>要运行的命令
Ctrl+d提交
例:
at 09:00 2024-03-28
at> your_command_here
Ctrl+d
atq 查看计划任务
atrm 任务号 删除某个任务
date 执行该命令后,系统会返回当前的日期和时间信息
date +%T
执行该命令后,系统会返回当前的时间,格式为时:分:秒
date +%F
系统会返回当前的日期,例如 2024-03-28,以年-月-日的格式显示
crontab命令格式
crontab -e [-u 用户名]
用于编辑当前用户的定时任务列表。通过此命令,您可以添加、修改或删除定时任务,-u 用户名:指定要编辑的用户的定时任务列表。如果没有指定用户名,则默认编辑当前用户的定时任务
crontab -l [-u 用户名]
用于列出当前用户的定时任务列表。执行该命令会显示当前用户的所有定时任务,-u 用户名:指定要列出的用户的定时任务列表。如果没有指定用户名,则默认显示当前用户的定时任务
crontab -r [-u 用户名]
用于删除当前用户的定时任务列表。执行该命令将删除当前用户的所有定时任务,-u 用户名:指定要删除的用户的定时任务列表。如果没有指定用户名,则默认删除当前用户的定时任务
任务设置格式:
分 时 日 月 星期 命令(绝对路径)
如果不知到要输的命令的绝对路径可以查一下:which 要查看的命令,或tyep 要查看的命令
设置以其他用户身份执行的任务:
crontab -e -u zhangsan
0 2 * * * /usr/bin/cp /etc/passwd /opt/passwd-$(date +%F)
解析:
因此,这条计划的作用是在每天凌晨2点,将 /etc/passwd 文件复制到 /opt 目录下,并以当前日期命名副本文件
crontab -l -u zhangsan
crontab -r -u zhangsan #清空zhangsan用户的所有任务,慎用
时间数值的特殊表示方法:
* 表示该范围内的任意时间
, 表示间隔的多个不连续时间点
- 表示一个连续的时间范围
/ 指定间隔的时间频率
示例如下:
0 22 * * 1,3,5 每周一三五22点整
30 23 * * 1-5 周一到周五每天23:30
0 10-22/2 * * * 10点到22点之间每2小时
*/5 * * * * 每5分钟
应用举例:
每天6:00启动sshd服务,23点50时关闭
每3天0点清空一次FTP服务器公共目录/var/ftp/pub
每周日的23:30时,重新启动httpd服务
每周一、三、五的0:30时,打包备份/etc/httpd目录
30 0 * * 1,3,5 /usr/bin/tar zcf /opt/httpd-$(date +%F).tar.gz /etc/httpd
解析:
因此,这条计划的作用是在每周的星期一、星期三和星期五的午夜30分,对 /etc/httpd 目录进行压缩,并将压缩后的归档文件保存为 /opt/httpd-当前日期.tar.gz
问题:如何实现只保留两周之内的备份?
10 2 * * * /usr/bin/rm -rf /opt/passwd-$(date -d “-14 day” +%F)
解析:
因此,这条计划的作用是在每天凌晨2点10分,删除 /opt 目录下名为 passwd-14天前日期 的目录(及其内容),使用 -rf 选项确保递归删除并且不需要确认
问题:如何实现每20秒创建一个文件?
要实现每隔 20 秒创建一个文件,可以通过编写一个脚本,并结合使用 crontab 来定时执行这个脚本。下面是一个示例方法:
#!/bin/bash
while true
do
touch /path/to/directory/file-$(date +"%Y%m%d%H%M%S").txt #请将脚本中的 /path/to/directory/ 替换为你想要创建文件的目录路径
sleep 20
done
+"%Y%m%d%H%M%S"
是 date
命令的参数,它指定了日期和时间的格式。在这里,%Y
表示四位数的年份,%m
表示两位数的月份,%d
表示两位数的日期,%H
表示小时(24 小时制),%M
表示分钟,%S
表示秒
因此,$(date +"%Y%m%d%H%M%S")
的作用是获取当前的年月日时分秒信息,并以指定的格式返回这个时间字符串。在这个脚本中,这个时间字符串被用于生成文件名,以确保每个创建的文件名都是唯一的,避免文件名冲突
chmod +x create_file.sh
crontab -e
* * * * * /path/to/create_file.sh
这样,脚本会在每分钟的整点时运行一次,然后在其中每隔 20 秒创建一个文件。虽然无法做到精确每隔 20 秒执行一次,但通过这种方式可以实现大致的每隔 20 秒创建一个文件的效果