进程和计划任务

进程和计划任务

 

程序

查看静态的进程统计信息ps命令

top命令

控制进程

计划任务

程序

程序和进程的关系
程序:

二进制文件,静态 存在 /bin/date /usr/sbin/sshd

保存在硬盘,光盘等介质中的可执行代码和数据

静态保存的代码

进程:

是程序运行的过程,动态,有生命周期及运行状态

在CPU及内存中运行的程序代码

动态执行的代码

父子程序

​ 每个程序可以创建一个或多个进程

程序,进程理解:

而我们在任务管理器看到的一个个进程则是由我们下载的应用程序所产生的,当然一个应用程序也可以包含多个进程

例:公司理解为程序,部门是进程,员工是线程

线程:

线程背包含在进程之中,是进程的实际运作单位,也是操作系统中能够独立的基本单位,也称为进程,一个进程中可以并发多个线程,每条线程可以并行执行不同的任务,

线程的三种状态:

就绪:在创建线程后存在等待CPU过来执行的时间称为就绪状态

运行:当CPU过来执行是就会转变成运行状态,而当CPU去执行别的线程是就会变回就绪状态

堵塞:如果线程正在运行中而又发生了需要向硬盘发送访问请求等一系列需要耗时输入输出的操作时线程就会进入堵塞状态CPU就会转而执行其他线程,等耗时操作结束后,之前堵塞状态的线程就会变成就绪状态。

例:我们在打开应用程序后,在后台运行了相应的进程,然后我们点击了应用程序中的某个功能之后由对进程中的线程,负责此功能的运行,这样就可以不用运行整个应用程序或进程,便可以完成操作者的命令了,即可节约了资源利用率,也增强了CPU的吞吐率。

协程:协程利用了线程等待的这个时间可以做别的事情(协程切换任务源很小,效率高)

 

查看静态的进程统计信息ps命令
常用的参数:

-a:显示当前终端下的所有进程信息,包括其他用户的进程,与 -x 选项结合时显示系统中所有的进程信息

-u:使用以用户为主的格式输出进程信息

-x:显示当前用户在所有终端的进程信息

-e:显示系统内的所有进程信息

-l:使用长格式显示进程信息

-f:使用完整的格式显示进程信息

常用组合:ps -aux 将以简单列表的形式显示出进程信息

​ ps -elf 将以长格式显示系统中的进程信息

 

 

USER:启动该进程的用户账号的名称

PID:该进程在系统中的数字 ID 号,在当前系统中是唯一的

%CPU:CPU占用的百分比

&MEM:内存占用的百分比

VSZ:该进程占用的虚拟内存量(KB)

RSS:该进程占用的物理内存量(KB)

TTY:表明了该进程在那个终端上运行,不是从终端启动的进程则显示为?

STAT:该进程的状态(D:不可中断的休眠状态,R:正在运行状态,S:处于休眠状态,可被唤醒,T:停止状态,可能是在后台暂停或进程处于跟踪调试状态,Z:僵尸进程,进程已经终止,但是部分程序还在内存当中)

僵尸进程:主进程已经终止,但是部分程序还在内存当中,不给父进程回收,大多出现在系统压力资源大的时候

孤儿进程:因为某种原因主进程被直接终止,子进程资源无法回收,大多出现在系统压力资源大的时候

START:启动进程的时间

TIME:该进程占用的 CPU 时间

COMMAND:启动该进程的命令的名称

状态:

D:系统守护进程

T:调试,程序执行一般停止

R:该程序目前正在运作,或者是可被运作

S:该程序目前正在睡眠当中(可以说是 idle(闲置)状态了),但可被某些讯号唤醒,T该程序目前正在侦测或者是停止了

Z:该程序应该已经终止,但是其父程序却无法的终止他,造成僵尸程序的状态D 不可中断状态

<:表示进程运行在高优先级上

N:表示进程运行在低优先级上

L:表示进程有页面锁定在内存中

s:表示进程是控制进程

l:表示进程是多线程的

+:表示当前进程运行在前台

ctrl -c 是发送 SIGINT 信号,终止一个进程

ctrl -z 是发送 SIGINT 信号,挂起一个进程,将作业放置到前台(暂停)

ctrl -d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF,代表输入完成或者注销

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

F:内核分配给进程的系统标记

S:进程的状态

UID:启动这些进程的用户

PID: 进程的进程ID

PPID:父进程的进程号(如果该进程是由另一“个进程启动的)

C:进程生命周期中的CPU利用率

PRI:进程的优先级(越大的数字代表越低的优先级)

NI:谦让度值用来参与决定优先级

ADDR:进程的内存地址

SZ:假如进程被换出,所需交换空间的大致大小

WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名

STIME:进程启动时的系统时间

TTY:进程启动时的终端设备。 pts/0255代表虚拟终端,一般是远程连接的终端;tty1tty7 代表本地控制台终端

TIME:运行进程需要的累计CPU时间

CMD:进程的启动命令

进程状态,常见的状态:

-D:不可被唤醒的睡眠状态,通常用于 I/O 情况

-R:该进程正在运行

-S:该进程处于睡眠状态,可被唤醒

-T:停止状态,可能是在后台暂停或进程处于除错状态

-W:内存交互状态(从 2.6 内核开始无效)

-X:死掉的进程(应该不会出现)

-Z:僵尸进程。进程已经中止,但是部分程序还在内存当中

-<:高优先级(以下状态在 BSD 格式中出现)

-N:低优先级

-L:被锁入内存

-s:包含子进程

-l:多线程(小写 L)

-+:位于后台

-C:进程占用CPU的百分比

 

top命令
top 命令全屏操作界面快捷键:
默认 3s 刷新一次,按 s 修改刷新时间按空格 :立即刷新
P:按 CPU 排序
M:按内存排序
T:按时间排序
p: 进程 IP,查看某个进程状态
N 键根据启动时间进行排序
数字键 1:显示每个内核的 CPU 使用率u/U:指定显示的用户
h:可以获得 top 程序的在线帮助信息
q:键可以正常地退出 top 程序

注:若通过 top 排名工具发现某个进程 CPU 占用率非常高,需要终止该进程的运行,可以在 top 操作界面中按 k 键,然后在列表上方将会出现“PID to signal/kill [default pid = 3180]:” 的提示信息,根据提示输入指定进程的 PID 号并按 Enter 键, 出现“Send pid 5597 signal [15/sigterm]”的二次确认的提示信息,然后按Enter 键确认即可终止对应的进程。

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:命令名/命令行

jobs命令
查看处于后台的任务列表

常用参数:

-l:选项可以同时显示该进程对应的PID号

fg命令
将后台进程恢复到前台运行

pgrep命令
查询进程信息

常用的参数:

-l:可同时输出对应的进程名以及PID

-U:查询特定用户的进程

-t:查询在特定终端运行的进程

pstree命令
以树形结构列出进程信息

pstree 命令默认情况下只显示各进程的名称

参数:

-p:使用时可以同时列出对应的PID号

-u:可以列出对应的用户名

-a:可以列出完整的命令信息

执行如下的“pstree -aup”命令可以查看当前系统的进程树,包括各进程对应的PID 号、用户名、完整命令等信息。从输出结果中可以看出,systemd 进程确实是 Linux 操作系统中所有进程的“始祖”

 

控制进程
1)挂起当前的进程
当Linux操作系统中的命令正在前台执行时(运行尚未结束),按Ctrl+Z组合键可以将当前进程挂起(调入后台并停止执行),这种操作在需要暂停当前进程并进行其他操作时特别有用。、

&:当断开远程连接(ssh)的时候(用户退出挂起的时候)命令自动退出

nohup:可以使得命令永远运行下去和用户终端没有关系,断开远程连接(ssh)的时候也不会影响他运行

手工启动进程:由用户手工输入命令或者可执行程序的路径,可以至少启动一个进程。根据该进程是否 需要占用当前的命令终端,手工启动又可以分为前台启动和后台启动

进程在前台运行:
(如执行“ls -l”命令)时,用户必须等到该进程执行结束并退出以后才能继续输入其他命令,大多数命令操作在前台启动运行。

进程在后台运行:

用户可以继续在当前终端中输入其他命令,而无须等待该进程结束,适用于运行耗时较长的操作

启动后台进程需要使用“&”操作符,将“&”操作符放在要执行命令的最后面,进程启动后会直接放入后台运行,而不占用前台的命令操作界面,方便用户进行其他操作

使用 bg(BackGround,后台)命令,可以将后台中暂停执行(如按 Ctrl+Z 组合键挂起)的任务恢复运行,继续在后台执行操作;

使用 fg 命令(ForeGround,前台),可以将后台任务重新恢复到前台运行
除非后台中的任务只有一个,否则 bg 和 fg 命令都需要指定后台进程的任务编号作为参数

调度启动
服务器维护工作中,经常需要执行一些比较费时而且较占用资源的任务(如数据备份),这些任务更适合在相对空闲的时候(如夜间)进行。这时就需要用户事先进行调度安排,指 定任务运行的时间,当系统到达设定时间时会自动启动并完成指定的任务。调度启动的计划 任务进程均在后台运行,不会占用用户的命令终端。
进程的调度启动可以通过 at、crontab 命令进行设置,其中 at 命令用于设置一次性(如12:15 时重启网络服务)计划任务,crontab 命令用于设置周期性运行(如每周五 17:30 备份数据库)的计划任务。

终止进程执行
当用户在前台执行某个进程时,可以按Ctrl+C组合键强制进行中断(如命令长时间没有响应的情况下)
中断前台进程的运行后,系统将返回命令行提示符状态等待用户输入新的命令。当按 Ctrl+C 组合键无法终止程序或者需要结束在其他终端或后台运行的进程时, 可以使用专用的进程终止工具 kill、killall 和 pkill。

1使用 kill 命令终止进程
通过 kill 命令终止进程时,需要使用进程的 PID 号作为参数。无特定选项时,kill 命令将给该进程发送终止信号并正常退出运行,若该进程已经无法响应终止信号,则可以结合“-9” 选项强行终止进程。强制终止进程时可能会导致程序运行的部分数据丢失,因此不到不得已时不要轻易使用“-9”选项。

2使用 killall 命令终止进程
使用 killall 命令可以通过进程名称来终止进程,当需要结束系统中多个相同名称的进程时,使用 killall 命令将更加方便,效率更高。killall 命令同样也有“-9”选项

3使用 pkill 命令终止进程

使用 pkill 命令可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特定的进程,大部分选项与 pgrep 命令基本类似,如“-U”(指定用户)、“-t”(指定终端) 等选项,使用起来非常方便

计划任务管理 at crontab命令
在 Linux 操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定的日期执行预先计划的系统管理任务(如定期备份、定期采集监测数据)。

CentOS 系统中默认已安装了 at、cronie 软件包,通过 atd 和 crond 这两个系统服务实现一次性、周期性计划任务的功能,并分别通过 at、crontab 命令进行计划任务设置

at一次性布置计划任务
使用at命令设置的计划任务只在指定的时间点执行一次,前提是对应的系统服务atd必须已经运行。需要注意的是,计划执行任务的时间、日期必须安排在当前系统的时刻之后, 否则将无法正确设置计划任务。
设置一次性计划任务时,在 at 命令行中依次指定计划执行任务的时间、日期作为参数
(若只指定时间则表示当天的该时间,若只指定日期则表示该日期的当前时间),确认后将进入带“at>”提示符的任务编辑界面,每行设置一条执行命令,可以依次设置多条语句,最后按 Ctrl+D 组合键提交任务。所设置的命令操作将在计划的时间点被依次执行。

对于已经设置但还未执行(未到时间点)的计划任务,可以通过 atq 命令进行查询。但已执行过的 at 任务将不会再出现在列表中

若要删除指定编号的 at 任务,可以使用 atrm 命令。删除后的 at 任务将不会被执行, 并且不会显示在 atq 命令的显示结果中,但已经执行过的任务无法删除

crontab周期性布置计划任务
时间数值的特殊表示方法:

*表示该范围内的任意时间

,表示间隔的多个不连续时间点

-表示一个连续的时间范围

/指定间隔的时间频率

1/etc/crontab——系统任务配置文件
/etc/crontab 文件中设置的是维护 Linux 操作系统所需的任务,Linux 操作系统及相关程序在安装时可自动设置,不建议用户手动修改此文件。例如,该文件中包括设置 Shell 环境、可执行路径等变量的操作,以及每分,每小时、每天、每月、每周需要执行的任务目录

 

 

使用 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服务

查看用户的计划任务列表
crontab 命令结合“-l”选项可以查看当前用户的计划任务列表,对于 root 用户来说,还可以结合“-u”选项查看其他用户的计划任务

删除用户的计划任务列表
当只需要删除某一条计划任务时,可以通过“crontab -e”命令进行编辑;而若要清空某个用户的所有计划任务,可以执行“crontab -r”命令

crontab -r:若是用户登录,清空(当前)自己设置的计划任务

方法二:可以直接进入“crontab -e”命令编辑,dd 删除编辑的命令

压力测试工具
yum install -y epel-release
yum install -y stress
stress :https://www.cnblogs.com/jiftle/p/12904248.html
sysstat
httpd-tools
ab
编辑cron服务

查看用户的计划任务列表
crontab 命令结合“-l”选项可以查看当前用户的计划任务列表,对于 root 用户来说,还可以结合“-u”选项查看其他用户的计划任务

删除用户的计划任务列表
当只需要删除某一条计划任务时,可以通过“crontab -e”命令进行编辑;而若要清空某个用户的所有计划任务,可以执行“crontab -r”命令

crontab -r:若是用户登录,清空(当前)自己设置的计划任务

方法二:可以直接进入“crontab -e”命令编辑,dd 删除编辑的命令

压力测试工具

yum install -y epel-release
yum install -y stress
stress :https://www.cnblogs.com/jiftle/p/12904248.html
sysstat
httpd-tools
ab
curl

计划任务

at 工具

由包 at 提供

依赖与atd服务,需要启动才能实现at任务

at队列存放在/var/spool/at目录中,ubuntu存放在/var/spool/cron/atjobs目录下

执行任务时PATH变量的值和当前定义任务的用户身份一致

at 命令的访问控制是依靠 /etc/at.allow(白名单)和 /etc/at.deny(黑名单)这两个文件来实现的,具体规则如下:

如果系统中有 /etc/at.allow 文件,那么只有写入 /etc/at.allow 文件(白名单)中的用户可以使用 at 命令,其他用户不能使用 at 命令(注意,/etc/at.allow 文件的优先级更高,也就是说,如果同一个用户既写入 /etc/at.allow 文件,又写入 /etc/at.deny 文件,那么这个用户是可以使用 at 命令的)。

如果系统中没有 /etc/at.allow 文件,只有 /etc/at.deny 文件,那么写入 /etc/at.deny 文件(黑名单)中的用户不能使用 at 命令,其他用户可以使用 at 命令。不过这个文件对 root 用户不生效。

如果系统中这两个文件都不存在,那么只有 root 用户可以使用 at 命令。

系统中默认只有 /etc/at.deny 文件,而且这个文件是空的,因此,系统中所有的用户都可以使用 at 命令。不过,如果我们打算控制用户的 at 命令权限,那么只需把用户写入 /etc/at.deny 文件即可

格式用法
HH:MM 比如 04:00 AM。如果时间已过,则它会在第二天的同一时间执行。
Midnight(midnight) 代表 12:00 AM(也就是 00:00)。
Noon(noon) 代表 12:00 PM(相当于 12:00)。
Teatime(teatime)下午茶 代表 4:00 PM(相当于 16:00)。
英文月名 日期 年份 比如 January 15 2018 表示 2018 年 1 月 15 号,年份可有可无。
MMDDYY、MM/DD/YY、MM.DD.YY 比如 011518 表示 2018 年 1 月 15 号。
now+时间 以 minutes、hours、days 或 weeks 为单位,例如 now+5 days 表示命令在 5 天之后的此时此刻执行。

 

crontab 周期

 

 

功能
-u user 用来设定某个用户的 crontab 服务,例如 "-u demo" 表示设备 demo 用户的 crontab 服务,此选项一般有 root 用户来运行。
-e 编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。
-l 显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。
-r 从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件。
-i 在删除用户的 crontab 文件时,给确认提示。
项目含义范围
第一个"*" 一小时当中的第几分钟(minute) 0~59
第二个"*" 一天当中的第几小时(hour) 0~23
第三个"*" 一个月当中的第几天(day) 1~31
第四个"*" 一年当中的第几个月(month) 1~12
第五个"*" 一周当中的星期几(week) 0~7(0和7都代表
特殊符号含义
*(星号) 代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思。
,(逗号) 代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。
-(中杠) 代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。
/(正斜线) 代表每隔多久执行一次。比如"*/10命令",代表每隔 10 分钟就执行一次命令

 

 

在书写 crontab 定时任务时,需要注意以下几个事项:

6 个选项都不能为空,必须填写。如果不确定,则使用“*”代表任意时间。

crontab 定时任务的最小有效时间是分钟,最大有效时间是月。像 2018 年某时执行、3 点 30 分 30 秒这样的时间都不能被识别。

在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都以天为单位,非常容易让管理员混淆。

在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径。有时使用相对路径的命令会报错。

posted @   withfear  阅读(88)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
----------------------------------- ©著作权归作者所有:来自51CTO博客作者一品堂_技术学习笔记的原创作品,请联系作者获取转载授权,否则将追究法律责任 博客园随笔中添加目录导航悬浮框博客园随笔中添加目录导航悬浮框 https://blog.51cto.com/ios9/3125785
点击右上角即可分享
微信分享提示