进程和计划任务管理
一.查看进程
二.控制进程
三.at一次性任务设置
四.crontab周期性任务设置
一. 程序和进程的关系
1.1程序
·保存在硬盘.光盘等介质中的可执行代码和数据
·静态保存的代码
·二进制的文件、静态
1.2进程
·在CPU及内存中运行的程序代码
·动态执行的代码
·程序运行的过程、动态,有生命周期及运行状态
·父、子进程
·每个程序可以创建一个或多个进程
1.3线程
·包含在进程之中,是线程中实际运作单位,也是操作系统中能够独立运行的基本单位,也称作轻量进程,一个进程中可以并发多个线程,每条线程可以并发执行不同任务,而我们在任务管理器中看到的一个个进程则由我们下载的应用程序所产生的,当然一个应用程序也可以包含多个进程。
1.4 协程
利用线程等待时间,执行其他任务辅助线程。
二.PS命令查看静态的进程统计信息
1.常用的参数
-a:显示当前终端下的所有进程信息,包括其他用户的进程。与“X”选项结合时将显示系统中所有的进程信息。
-u:使用以用户为主的格式输出进程信息。
-x:显示当前用户在所有终端下的进程信息。
2.常用的选项组合
Ps -aux 将以简单列表的形式显示出进程信息
-a:显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将显示系统中所有的进程信息。
-u:使用以用户为主的格式输出进程信息。
-x:显示当前用户在所有终端下的进程信息。
USER:启动该进程的用户账号的名称。
PID:该进程在系统中的数字ID号,在当前系统中是唯一的。
%CPU:CPU占用的百分比。
%MEM:内存占用的百分比。
VSZ:该进程使用的虚拟内存量(KB)。
RSS:该进程占用的物理内存量(KB)。
TTY:表明该进程在哪个终端上运行。不是从终端启动的进程则显示为?。
简说:pts是远程登录终端 ctrl+ALT F1-F6 tty1图形界面
2和6字符界面 ?系统本身自身执行的进程
STAT:该进程的状态(D:不可中断的休眠状态;R:正在运行状态;S:处于休眠状态,可被唤醒;T:停止状态,可能是在后台暂停或进程处于跟踪调试状态;Z:僵尸进程,进程已经中止,但是部分程序还在内存当中)。
D:系统守护进程
T:调式、程序执行一般停止
R:该程序目前正在运作,或者是可被运作
S:该程序目前正在睡眠当中(可说是idle状态啦!),但可被某些讯号(signal)唤醒。T:该程序目前正在侦测或者是停止了;
Z:该程序应该已经终止,但是其父程序却无法正常的终止他,造成zombie(疆尸)程序的状态D不可中断状态。
它们含意如下:
<:表示进程运行在高优先级上
N:表示进程运行在低优先级上
L:表示进程有页面锁定在内存中
s:表示进程是控制进程
l:表示进程是多线程的
+:表示当前进程运行在前台
D:系统守护进程
T:调式、程序执行一般停止
START:启动该进程的时间。
TIME:该进程占用的 CPU 时间。
COMMAND:启动该进程的命令的名称
例1
查看进程状态[root@benet ~]# vim a.txt 在另一个终端执行:
[root@benet ~]# ps -aux|grep a.txt 查看状态S表示睡眠状态,+表示前台
root 4435 0.0 0.2 151752 5292 pts/1 S+ 20:52 0:00 vim a.txt
root 4661 0.0 0.0 112676 996 pts/0 S+ 21:05 0:00
grep --color=auto a.txt
在vim a.txt 这个终端上 按下:ctrl+z[1]+ 已停止vim a.txt 在另一个终端执行:
[root@benet ~]# ps -aux|grep a.txt 查看状态 T 表示停止状态
root 4435 0.0 0.2 151752 5292 pts/1 T 20:52 0:00 vim a.txt
root 4675 0.0 0.0 112676 996 pts/0 S+ 21:05 0:00
grep --color=auto a.txt
注:
ctrl-c 是发送 SIGINT 信号,终止一个进程
ctrl-z 是发送 SIGSTOP 信号,挂起一个进程。将作业放置到后台(暂停)
ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。代表输入完成或者注销
例2 D 不可中断状态
[root@xuegod63 ~]# tar -zcvf usr-tar.gz /usr/
然后在另一个终端不断查看状态,由 S+,R+变为 D+
ps -elf 将以长格式显示系统中的进程信息
-e:显示系统内的所有进程信息。
-1:使用长格式显示进程信息。
-f:使用完整的格式显示进程信息。
F:内核分配给进程的系统标记。
S:进程的状态。
UID:启动这些进程的用户。
PID: 进程的进程ID.
PPID:父进程的进程号(如果该进程是由另一“个进程启动的)
C:进程生命周期中的CPU利用率。
PRI:进程的优先级(越大的数字代表越低的优先级)。
NI: 谦让度值用来参与决定优先级。
ADDR:进程的内存地址。
SZ:假如进程被换出,所需交换空间的大致大小。
WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名。
STIME:进程启动时的系统时间。
TTY:进程启动时的终端设备。 pts/0255代表虚拟终端,一般是远程连接的终端;tty1tty7 代表本地控制台终端
TIME:运行进程需要的累计CPU时间。
CMD:进程的启动命令。
僵尸进程:
一个进程结束了,但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程,因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由init来接管它,成为它的父进程,子进程退出后init会回收其占用的相关资源。但是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。
top命令-查看进程动态信息
Uptime:当前时间 Up:系统运行时间 ,说明此服务器连续运行 20 天了
1 user:当前登录用户数 load average:系统负载,即任务队列的平均长度。 三个数值分别为 1 分钟、5 分钟、15 分钟前到现在的平均值。
系统任务(Tasks)信息:total,总进程数;running,正在运行的进程数;sleeping,休眠的进程数;stopped,中止的进程数;zombie,僵死无响应的进程数。
%CPU(s) 占用信息:us,用户占用;sy,内核占用;ni,优先级调度占用;id,空闲CPU;wa,I/O 等待占用;hi,硬件中断占用;si,软件中断占用;st,虚拟化占用。要了解空闲的 CPU 百分比,主要看%id 部分。
内存占用(Mem)信息:total,总内存空间;free,空闲内存;used,已用内存;buff/cache,物理内存和交换内存的缓冲区总和。
交换空间(Swap)占用:total,总交换空间;free,空闲交换空间;used,已用交换空间;avail Mem,可用物理空间。
PID:进程 id
USER:进程所有者的用户名
PR:优先级(由内核动态调整),用户不能
NI:进程优先级。 nice 值。负值表示高优先级,正值表示低优先级,用户可以自己调整
VIRT:(virtual memory usage) 虚拟内存,是进程正在使用的所有内存(ps 中标为 VSZ) VIRT:virtual memory usage 虚拟内存
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请 100m 的内存,但实际只使用了 10m,那么它会增长
100m,而不是实际的使用量
RES:(resident memory usage) 是进程所使用的物理内存。实际实用内存(ps 中标为 RSS) RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括 swap out
2、包含其他进程的共享
3、如果申请 100m 的内存,实际使用 10m,它只增长 10m,与 VIRT 相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小
SHR:共享内存大小,单位 kb SHR:shared memory 共享内存
1、除 M 了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR 4、swap out 后,它将会降下来
S:进程状态。
D=不可中断的睡眠状态
R=运行中或可运行S=睡眠中
T=已跟踪/已停止Z=僵停
%CPU:上次更新到现在的 CPU 时间占用百分比
%MEM:进程使用的物理内存百分比
TIME+:进程使用的 CPU 时间总计,单位 1/100 秒
COMMAND:命令名/命令行
top 命令全屏操作界面快捷键:
默认 3s 刷新一次,按s修改刷新时间按空格:立即刷新。
P(大写):按 CPU 排序
M:按内存排序
T:按时间排序
P(小写):在外部使用 top -p PID 追踪进程
N:键根据启动时间进行排序
数字键1:显示每个内核的 CPU 使用率u/U:指定显示的用户
h:可以获得 top 程序的在线帮助信息
q:键可以正常地退出top程序
K(小写):删除进程
注:若通过 top 排名工具发现某个进程 CPU 占用率非常高,需要终止该进程的运行,可以在 top 操作界面中按 k 键,然后在列表上方将会出现“PID to signal/kill [default pid = 3180]:”的提示信息,根据提示输入指定进程的 PID 号并按 Enter 键, 出现“Send pid 5597 signal [15/sigterm]”的二次确认的提示信息,然后按Enter 键确认即可终止对应的进程。
pgrep命令查询进程信息
-l:选项可同时输出对应的进程名以及PID号
-U:选项查询特定用户的进程
-t:选项查询在特定终端运行的进程
例:pgrep -l "log"
pgrep -l -U teacher -t tty1
pstree命令以树形结构列出进程信息
pstree 命令默认情况下只显示各进程的名称,
结合以下常用的参数使用:
-p:选项使用时可以同时列出对应的PID号
-u:选项可以列出对应的用户名
-a:选项可以列出完整的命令信息
“pstree -aup”命令可以查看当前系统的进程树,包括各进程对应的PID 号、用户名、完整命令等信息
二.控制进程
1.手工启动进程
由用户手工输入命令或者可执行程序的路径,可以至少启动一个进程。根据该进程是否 需要占用当前的命令终端,手工启动又可以分为前台启动和后台启动。
1.1前台启动
如执行“ls -l”命令)时,用户必须等到该进程执行结束并退出以后才能继续输入其他命令,大多数命令操作在前台启动运行。进程在后台运行时,用户可以继续在当前终端中输入其他命令,而无须等待该进程结束,适用于运行耗时较长的操作。
1.2后台启动
启动后台进程需要使用“&”操作符,将“&”操作符放在要执行命令的最后面,进程启动后会直接放入后台运行,而不占用前台的命令操作界面,方便用户进行其他操作。例如,当使 用 cp 命令从光盘中制作镜像文件时,由于需要复制的数据较多,耗时较长,因此可结合“&” 符号将复制操作放到后台运行,以便用户可以继续执行其他命令操作。
cp /dev/cdrom /home/cetos7.iso &
2.进程的前后台调度
2.1 Ctrl+Z组合键
将当前进程挂起,即调入后台并停止执行
tar zcf usr.tar.gz /usr &
2.2jobs命令
查看处于后台的任务列表
2.3 将后台的进程恢复运行
使用 bg命令(BackGround,后台),可以将后台中暂停执行(如按 Ctrl+Z 组合键挂起)的任务恢复运行,继续在后台执行操作;
使用 fg命令(ForeGround,前台),可以将后台任务重新恢复到前台运行。
除非后台中的任务只有一个,否则 bg 和 fg 命令都需要指定后台进程的任务编号作为参数。
3.终止进程的运行
Ctrl+c 组合键:中断正在执行进程的命令
3.1使用 kill 命令终止进程
通过 kill 命令终止进程时,需要使用进程的 PID 号作为参数。无特定选项时,kill 命令将给该进程发送终止信号并正常退出运行,若该进程已经无法响应终止信号,则可以结合“-9” 选项强行终止进程。强制终止进程时可能会导致程序运行的部分数据丢失,因此不到不得已时不要轻易使用“-9”选项。
例:
若 SSH 服务的 sshd 进程的 PID 号为 5822,则执行“kill 5822”命令后可以将进程 sshd 终止
[root@localhost ~]# pgrep -l "sshd" 查询目标进程的PID 号
5822 sshd
[root@localhost ~]# kill 5822 终止指定PID 的进程
[root@localhost ~]# pgrep -l "sshd" 确认进程已终止(查询时无结果
对于无法正常终止的系统进程,在必要时可以结合“-9”选项强制终止。例如,以下操作展示了强制终止 vim 进程的过程
[root@localhost ~]# vim testfile & 打开vim 程序并挂起作为测试
[1]+ Stopped vim testfile
[root@localhost ~]# jobs –l 查询目标进程的PID 号
[1]+ 7095 Stopped vim testf ile
[root@localhost ~]# kill 7095 尝试正常结束进程
[root@localhost ~]# jobs -l 但发现vim 进程并未退出
[1]+ 7095 Stopped vim tmpfile
[root@localhost ~]# kill -9 7095 强制终止目标进程[root@localhost ~]# jobs -l 成功终止vim 进程
[1]+ 2993 已 杀死 vim tmpfile
3.2使用 killall 命令终止进程
使用 killall 命令可以通过进程名称来终止进程,当需要结束系统中多个相同名称的进程时,使用 killall 命令将更加方便,效率更高。killall 命令同样也有“-9”选项。例如,执行如下的“killall -9 vim”命令可将所有名为 vim 的进程都强行终止
[root@localhost ~]# vim testfile1 & 挂起第 1 个 vim 测试进程
[1]+ Stopped vim testfile1
[root@localhost ~]# vim testfile2 & 挂起第 2 个 vim 测试进程
[2]+ Stopped vim testfile2
[root@localhost ~]# jobs -l 确认待终止的进程信息
[1]- 7144 Stopped vim testfile1
[2]+ 7153 Stopped vim testfile2
[root@localhost ~]# killall -9 vim 通过进程名终止多个进程
[root@localhost ~]# jobs -l
[1]- 7144 Killed vim testfile1
[2]+ 7153 Killed vim testfile2
3.3使用 pkill 命令终止进程
使用 pkill 命令可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特定的进程,大部分选项与 pgrep 命令基本类似,如“-U”(指定用户)、“-t”(指定终端) 等选项,使用起来非常方便。例如,若要终止由用户 hmj 启动的进程(包括登录 Shell),可以执行以下操作。
su - hmj
vim tst.txt &
[root@localhost ~]# pgrep –l -U "hmj" 确认目标进程相关信息3773 bash
[root@localhost ~]# pkill -9 -U "hmj" 强行终止用户hackli的进程
[root@localhost ~]# pgrep -l -U "hmj" 确认目标进程已被终止
三.at一次性任务设置
使用at命令设置的计划任务只在指定的时间点执行一次,前提是对应的系统服务atd必须已经运行。需要注意的是,计划执行任务的时间、日期必须安排在当前系统的时刻之后, 否则将无法正确设置计划任务。
设置一次性计划任务时,在 at 命令行中依次指定计划执行任务的时间、日期作为参数
(若只指定时间则表示当天的该时间,若只指定日期则表示该日期的当前时间),确认后将进入带“at>”提示符的任务编辑界面,每行设置一条执行命令,可以依次设置多条语句,最后按 Ctrl+D 组合键提交任务。所设置的命令操作将在计划的时间点被依次执行。
示例:
先通过 date 命令确认当前的系统时间,并设置在 2017 年 5 月 7 日的10:35 自动执行以下任务:统计该时间点系统中由 root 用户运行的进程的数量,并将该数值保存到/tmp/ps.root 文件中。
at [HH:MM] [yyyy-mm-dd]
任务设置完毕后按Ctrl+D 组合键提交
例1
[root@kgc /]# date
2021年 08月 16日 星期一 16:20:58 +00
[root@kgc /]# at 16:23 2021-08-16
at> pgrep -U root | wc -l > /tmp/ps.root //任务设置完毕后按Ctrl+D 组合键提交
at> <EOT><EOT>
job 1 at Mon Aug 16 16:23:00 2021
[root@localhost ~]# cat/tmp/ps.root 等过了计划时间后验证命令结果202
例2
以下操作将设置一条计划任务,在当天的 21:30 自动关闭当前系统。
[root@localhost ~]# at 21:30
at> shutdown -h now
at> <EOT>
四.crontab 周期性任务设置
1.crontab任务配置的格式
字段 |
说明 |
分钟 |
取值为从0到59之间的任意整数 |
小时 |
取值为从0到23之间的任意整数 |
日期 |
取值为从1到31之间的任意整数 |
月份 |
取值为从1到12之间的任意整数 |
星期 |
取值为从0到7之间的任意整数,0或7代表星期日 |
命令 |
要执行的命令或程序脚本 |
2.时间数值的特殊表示方法
*表示该范围内的任意时间
,表示间隔的多个不连续时间点
-表示一个连续的时间范围
/指定间隔的时间频率
3.应用示例
0 17 * * 1-5 周一到周五每天17:00
30 8 * * 1,3,5 每周一、三、五的8点30分
0 8-18/2 * * * 8点到18点之间每2小时
0 * */3 * * 每3天
4.使用 crontab 命令管理用户的计划任务
设置用户的周期性计划任务列表主要通过 crontab 命令进行,结合不同的选项可以完成不同的计划任务管理操作。常用的选项如下。
Ø-e:编辑计划任务列表。
Ø-u:指定所管理的计划任务属于哪个用户,默认是针对当前用户(自己),一般只有 root 用户有权限使用此选项(用于编辑、删除其他用户的计划任务)。
Ø-l:列表显示计划任务。
Ø-r:删除计划任务列表。
下面将分别讲解 crontab 命令相关选项的使用。
crontab -u 用户名 #指定XX用户的cron服务
crontab -l #列出当前用户下的cron的详细内容
crontab -u zx -l #列出zx用户下的cron的详细内容
crontab -r #删除所有用户的cron内容,普通用户执行,只删除自己的cron内容
crontab -r -u zx #删除zx用户的cron内容
crontab -e #编辑cron服务
五.总结
1.查看系统进程的常用命令
ps -aux elf top pgrep pstree
2.启动进程
前台启动 输入指令 直接执行程序
后台启动 在命令后 加入 & 符号
3.调度进程
Ctrl+Z组合键
将当前进程挂起,即调入后台并停止执行
jobs命令
查看处于后台的任务列表
fg命令
将后台进程恢复到前台运行,可指定任务序号
4.终止进程
Ctrl+C组合键
kill、killall命令
kill用于终止指定PID号的进程
killall用于终止指定名称的所有进程
-9选项用于强制终止
5.计划任务
一次性计划任务 at atq 查看 atrm 删除
crontab计划任务的配置字段
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了