linux下进程与定时任务的管理
进程与程序
程序:
存储在硬盘、光盘等介质中含有可执行代码的可执行文件。
不删除就永久存在。
状态为静态。
进程:
进程是资源分配的最小单位。
临时存储在内存中(关机消失)。
动态执行的代码。
一个父进程可以拥有多个子进程。若该进程的父进程先行终止,而子进程没由终止,其子进程变为僵尸进程
根据线程数分类可以分为
进程型程序
和线程型程序
。
线程:
线程是CPU调度的最小单位(程序执行的最小单元,共享线程内存资源)
进程程序:
一个程序就一个线程,从稳定性的角度来看程序稳定更好。
线程程序:
一个进程有6万多个线程,从效率的角度看线程型程序更好。
进程的启动顺序:
- 父进程(master)先启动然后子进程(worker)启动,由socket进程守护端口。
- 父进程先于子进程死掉,子进程的资源无法回收,形成僵尸进程
进程管理
静态查看进程
命令1:
ps aux
选项:
a
显示终端上的所有进程,包括其它用户的进程。
u
表示列出进程的用户。
x
显示当前用户在所有终端下的进程信息。
列名 说明 USER 进程的用户 PID 进程的ID号 %CPU 进程占用的 CPU 百分比 %MEM 进程占用的 内存 的百分比 VSZ 进程使用的虚拟内存量 RSS 进程占用的物理内存量 TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
STAT 进程状态:D 不可中断状态;R 正在运行;S 休眠状态;T 停止状态;Z 僵尸进程,该进程的父进程已经死掉 START 进程的启动时间 TIME 进程运行的时间 COMMAND 进程的启动命令 命令2:
ps -elf
或ps -eLf
选项:
-e
显示系统内的所有进程信息。
l
使用长格式显示进程信息。
L
查看进程的父进程号
f
使用完整的格式显示进程信息。l可以查看进程的父进程号,L可以查看进程的父进程号
动态查看进程
命令:
top [选项]
选项:
-d
指定刷新的间隔时间,单位秒
-b
以批量处理模式操作,一般与-n
同时使用
-n
指定循环显示的次数
-u
指定用户名
-p
指定进程号
- 作用:top 命令将会在当前终端以全屏交互式的界面显示进程排名,及时跟踪包括 CPU、 内存等系
统资源占用情况,默认情况下三秒刷新一次,默认以 CPU 占用率排序。top交互界面示例图:
表头第一行解释:
系统时间 up 5:32 ##系统已运行时长 2 user ##当前登录用户数 load average: 0.00, 0.01, 0.05 ##平均负载:1分,5分,15分
表头第二行解释:
Tasks ##总进程数 Threads ##总线程数(按H) running ##正在运行的进程数 sleeping ##休眠的进程数 stopped ##中止的进程数 zombie ##僵死的进程数
表头第三行解释:
us ##用户占用 sy ##内核占用 ni ##优先级调度占用 id ##空闲CPU,要解空闲的 CPU 百分比,主要看%id 部分 wa ##I/O 等待占用 hi ##硬件中断占用 si ##软件中断占用 st ##虚拟化占用
表头第四行解释:
total ##总内存空间 free ##空闲内存 used ##已用内存 buff/cache ##物理内存和交换内存的缓冲区总和
表头第五行解释:
total ##总交换空间 free ##空闲交换空间 used ##已用交换空间 avail Mem ##可用物理空间
top交互按键:
按键 作用 P键 根据CPU使用百分比大小进行排序 M键 根据内存大小进行排序 N 键 根据启动时间进行排序 c 键 切换显示命令名称和完整命令行 h 键 top程序的帮助界面 k键 输入指定进程的 PID 号终止进程 q 键 退出 数字 1 键 显示CPU个数和状态 H 键 查看线程
查看进程信息
命令:
pgrep [选项]
常用选项:
-l
显示进程名
-U
指定特定用户
-t
指定终端
查看进程树
命令:
pstree [选项]
常用选项:
-a
显示完整信息
-u
列出对应用户名
-p
列出对应 PID 号
后台启动进程
例:我们启动一个ping命令常常会占据我们的前台,这个时候我们不能进行其他操作
这时,我们可以通过以后台启动的方式进行ping
我们只需要在命令的末尾加上
&
符号即可
后台程序可以用
jobs -l
命令查看(-l可以查看其的PID)
fg
命令可以将后台进程恢复到前台运行,可指定任务程序号
Ctrl+Z
将当前进程挂起,即调入后台并停止执行
bg
命令可以将后台暂停的进程调至后台运行
nohup
用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
终止进程
Ctrl+C
中断正在执行的命令
kill killall
命令 (-9 选项用于强制终止)
kill 用于终止指定 PID 号的进程
killall 用于终止指定名称的所有进程
pkill
命令格式:
pkill -9 [选项]
(-9 选项用于强制终止)选项:
-U
根据进程所属的用户名终止相应进程
-t
根据进程所在的终端终止相应进程
定时任务
一次性定时任务
at
命令设置的计划任务只在指定的时间点执行一次,前提是对应的系统服务atd必须已经运行。需要注意
的是,计划任务执行的时间、日期必须安排在当前系统的时候之后,否则将无法正确设置计划任务。
at
命令 :在指定的时间执行命令。Ctrl + D 进行提交at的特殊写法:
- at 20:00 2024-10-1 在具体时间执行
- at now +10min 在十分钟后执行
- at 17:00 tomorrow 明天下午五点执行
- at 6:00 pm + 3 days 在3天后下午6点执行
- at 23:00 < a.txt 将a.txt导入
at -c 查看任务的具体内容
atrm[任务序号]删除第几项任务 atrm=at -d
atq 或 at -l查看 未执行的定时任务列表;
命令:
at HH:MM
选项:
-l
查看已有一次性定时任务
-d
删除指定定时任务
-c
查看任务的具体内容
ctrl+D
保存任务
周期行定时任务
使用
crontab
命令设置的计划任务可以按预设的周期重复执行,可以大大减轻设置重复性系统管理任务的操作。启用周期性任务也有一个前提的条件,即对应的系统服务crond必须已经运行。
- 按照预先设置的 时间周期(分、时、日、月、周)重复执行用户 指定的命令 操作
- 属于 周期性计划任务。
- 主要设置文件
- 全局配置文件:
/etc/crontab
- 系统默认的设置:
/etc/cron.*/
- 用户定义的设置:
/var/spool/cron/用户名
- 日志文件:
/var/log/cron
- 邮件文件保存位置:
/var/spool/mail
- 邮件发送失败,会保存小文件:
/var/spool/postfix/maildrop
命令:
crontab [选项]
选项:
-e
编辑计划任务
-l
查看计划任务
-r
清空定时任务定时任务的格式为:分 时 日 月 周 命令
10 10 1 1 * /bin/ls /root
时间数值表示方法:
*
:表示这个字段的范围内 任意 的时间;,
:表示间隔的多个 不连续 时间点;-
:表示一个 连续 的时间范围;/
:指定间隔的时间频率,每几天、每几小时 执行一次;常见的表达式实例:
0 17 * * 1-5 # 周一 到 周五 每天17:00 30 8 * * 1,3,5 # 每周一、三、五的 8点30分 0 8-18/2 * * * # 8点 到 18点 之间 每2小时 0 * */3 * * # 每 3 天 0 0 * * * #每天定时执行一次 0 0 * * 1 #每周定时执行一次 0 0 1 * * #每月定时执行一次 0 0 1 1 * #每年定时执行一次
- 用户定义的设置:/var/spool/cron/用户名