第九节 进程和计划任务管理

第九节 进程和计划任务管理

一、什么是进程?

进程是指在系统中正在运行的一个应用程序,程序一旦运行就是进程。
进程是系统进行资源分配的独立实体, 且每个进程拥有独立的地址空间。根据程序的不同需求有父子进程,所有每个程序可以创建多个进程。

进程和程序之间的区别:

程序是静态的实体(存储在某种介质上的⼆进制代码),进程是动态的实体(对应了程序的执⾏过程),系统不需要为⼀个不执⾏的程序创建进程,⼀旦进程被创建,就处于不断变化的动态过程中,对应了⼀个不断变化的上下⽂环境。程序是永久的,进程是暂时存在的。程序的永久性是相对于进程⽽⾔的,只要不去删除它,它可以永久的存储在介质当中。

二、什么是线程?

轻量级进程,是操作系统进行调度的最小单位。一个线程是一个任务(一个程序段)的一次执行过程。线程不占有内存空间,它包括在进程的内存空间中。在同一个进程内,多个线程共享进程的资源。一个进程至少有一个线程。

线程的三种状态:

就绪:在创建线程后存在等待cpu过来的执行的时间称为就绪状态
运行:当cpu过来执行时就会转变成运行状态,而当cpu去执行别的线程时就会变回就绪状态
阻塞:如果线程正在运行中而又发生了需要向硬盘发送访问请求等一系列需要耗时输入输出的操作时线程就会进入阻塞状态cpu就会转而执行其他线程,等到耗时操作结束后,之前阻塞状态的线程就会又变成就绪状态。

协程:

回调:

三、ps命令

查看静态的进程统计信息

ps 选项 (进程名)
    -a 显示当前终端下的所有进程信息,包括其他用户的进程。与x选项结合时将显示系统中所有的进程信息。
    -u 使用以用户为主的格式输出进程信息
    -x 显示当前用户在所有终端下的进程信息
    -e:显示系统内的所有进程信息
    -1:使用长格式显示进程信息
    -f:使用完整的格式显示进程信息
常用组合:
        ps aux //将以简单列表的形式显示出进程信息
        ps elf //将以长格式显示系统中的进程信息

image-20220525205845517

USER:启动该进程的用户账号的名称
PID:该进程在系统中的数字 ID 号,在当前系统中是唯一的
%CPU:CPU 占用的百分比
%MEM:内存占用的百分比
VSZ:该进程使用的虚拟内存量KB
RSS:该进程占用的物理内存量KB                             
TTY:tty 源于Teletypes即终端,?表示不是在终端上运行的
STAT:该进程的状态(D:不可中断的休眠状态:R:正在运行状态;S:处于休眠状态,可被唤醒;T:停止状态,可能是在后台暂停或进程处于跟踪调试状态: Z:僵尸进程,进程已经中止,但是部分程序还在内存当中):
  ##D[aemon]:系统守护进程
    T:调式、程序执行一般停止  
  ##R[unning] :该程序目前正在运作,或者是可被运作;
  ##S[leep] :该程序目前正在睡眠当中 (可说是 idle 空闲状态啦),但可被某些讯号(signal) 唤醒。
    T :该程序目前正在侦测或者是停止了;
  ##Z [mbie]:该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
    后缀含意如下::
     ## <: 表示进程运行在高优先级上
     ## N: 表示进程运行在低优先级上
        L: 表示进程有页面锁定在内存中
        s: 表示进程是控制进程
     ##  l: 表示进程是多线程的
     ## +: 表示当前进程运行在前台
START:启动该进程的时间。
TIME:该进程占用的 CPU 时间。
COMMAND:启动该进程的命令的名称

僵尸进程和孤儿进程:

僵尸进程:僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。如果父进程先退出 ,子进程被init接管,子进程退出后init会回收其占用的相关资源

孤儿进程:其父进程执行完成或被终止后仍继续运行的一类进程。这些孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

进程的快捷键
ctrl+c 是发送 SIGINT 信号,终止一个进程。
ctrl+z 是发送 SIGSTOP 信号,挂起一个进程。将作业放置到后台(暂停)。
ctrl+d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。代表输入完成或者注销,可以理解为终止。

image-20220526152644115

各参数信息
F:内核分配给进程的系统标记。
S:进程的状态。
UID:启动这些进程的用户。
PID: 进程的进程ID.
PPID:父进程的进程号(如果该进程是由另一“个进程启动的)
C:进程生命周期中的CPU利用率。
PRI:进程的优先级(越大的数字代表越低的优先级)。
NI: 谦让度值用来参与决定优先级。
ADDR:进程的内存地址。
SZ:假如进程被换出,所需交换空间的大致大小。
WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名。
STIME:进程启动时的系统时间。
TTY:进程启动时的终端设备。   pts/0255代表虚拟终端,一般是远程连接的终端;tty1tty7 代表本地控制台终端
TIME:运行进程需要的累计CPU时间。
CMD:进程的启动命令。
//NI和PRI区别的PRI -> 进程的优先级,大部分系统(Linux、UCOSII)都是数字越低优先级越高,进程就优先运行 , Linux中的PRI(new) = PRI(old) + nice ,其中 , PRI(old)为系统算法决定 ,在创建时被赋予不同的值,用户不可修改 ,用户只能通过修改nice来修改进程的优先级,NI -> nice , 进程优先级的修正量, -20 ~ 19 ,用户可修改 (root用户可修改nice值-20 ~ 19 ,普通用户只能修改nice值0~19 )。一般情况下,子进程继承父进程的nice值,由于init进程的nice值为0,所有大部分进程的nice值都为 0。
四、查看进程动态信息top命令
top命令可以把服务器上的所有进程信息都显示出来,并且可以显示每个进程的CPU使用量、内存使用量,进程ID。默认3秒钟刷新一次。top类似于Windows电脑上面的的任务管理器。
    C:按 CPU 排序
    M:按内存排序
    T:按时间排序
    p: 进程 IP,查看某个进程状态、
    N 键根据启动时间进行排序
    数字键 1:显示每个内核的 CPU 使用率u/U:指定显示的用户
    h:可以获得 top 程序的在线帮助信息
    q:键可以正常地退出 top 程序

image-20220526173505984

PID	进程id
USER 进程所有者的用户名
PR 优先级(由内核动态调整),用户不能
NI 进程优先级。 nice 值。负值表示高优先级,正值表示低优先级,用户可以自己调整
VIRT(virtual memory usage) 虚拟内存,是进程正在使用的所有内存(ps 中标为 VSZ) VIRT:virtual memory usage 虚拟内存,进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等,假如进程申请 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	命令名/命令行

image-20220526184924853

18:50:18	当前时间
up 1007	系统运行时间
1 user	当前登录用户数
load average: 0.00, 0.01, 0.05	系统负载,即任务队列的平均长度。 三个数值分别为 1 分钟、5 分钟、15 分钟前到现在的平均值。
系统任务(Tasks)信息:
    183 total,总进程数;
    1 running,正在运行的进程数;
    0 sleeping, 休眠的进程数;
    0 stopped,中止的进程数;
    0 zombie,僵死无响应的进程数;
%CPU 占用信息:
    0.1 us,用户占用;
    0.0 sy,内核占用;
    0.6 ni,优先级调度占用;
    99.9 id,空闲CPU;
    0.0 wa,I/O 等待占用;
    0.0 hi,硬件中断占用;
    0.0 si,软件中断占用;
    0.0 st,虚拟化占用;
内存占用(Mem)信息:
    1865304 total,总内存空间;
    1003888 free,空闲内存;
    415976 used,已用内存;
    445440 buff/cache,物理内存和交换内存的缓冲区总和。
交换空间(Swap)占用:
    2098172total,总交换空间;
    2098172free,空闲交换空间;
    0 used,已用交换空间;
    1215972 avail Mem,可用物理空间。

五、查询进程命令信息pgrep命令
以名称为依据从运行进程队列中查找进程,并显示查找到的进程id。每一个进程ID以一个十进制数表示,通过一个分割字符串和下一个ID分开,默认的分割字符串是一个新行。对于每个属性选项,用户可以在命令行上指定一个以逗号分割的可能值的集合。
-l:选项可同时输出对应的进程名以及PID
-U:选项查询特定用户的进程
-t:选项查询在特定终端运行的进程

image-20220526193705708

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

结合一下常用的参数使用
    -p 同时列出对应的pid号
    -u 列出对应的用户名
    -a 列出完整的命令信息

image-20220527144234201

六、控制进程

1、手工启动进程

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

手工启动又分为前台启动和后台启动:

进程在前台运行,用户必须等到该进程执行结束并退出以后才能继续输入其他命令,大多数命令操作在前台启动运行。进程在后台运行时,用户可以继续在当前终端中输入其他命令,而无需等待该命令结束,使用于运行耗时长的操作。

启动后台进程需要使用单‘&’操作码,将&放在执行命令的后面,进程启动后直接到后台运行,而不占用前台的命令界面,方便进行其他操作。

例:

image-20220527153317624

2、调度启动

在维护工作中,经常需要执行一些比较费时和占用资源的任务,有些任务相对适合在空闲时间执行,这时就需要用户事先调度安排,指定任务运行的时间,当系统到达设定时间时会自动启动并完成指定的任务。调度启动的计划任务进程均在后台运行,不会占用用户的命令终端。进程的调度启动可以通过 at、crontab命令进行设置。

6.1 进程的前后台调度

挂起当前的进程

当Linux操作系统中的命令正在前台执行时,按ctrl+z暂停当前进程并挂起到后台,这种操作在需要暂停当前进程并进行其他操作时特别有用。

注:Ctrl+z和&以及nohup区别

6.2 查看处于后台的任务列表 jobs命令
jobs 
    -l 同时显示该进程对应的PID号
6.3 将后台的进程恢复运行
bg(background,后台)命令,可以将后台中暂停执行的任务恢复运行,继续在后台执行操作
fg(foreground,前台)命令,可以将后台任务重新恢复到前台运行。
    注如果后台命令有多个,则命令字后面不可以省略,需要添加任务编号指定后台进程。

image-20220527170535265

6.4 终止进程执行(kill、pkill、killall)

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

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

image-20220527175557634

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

image-20220527180017001

pkill 命令终止进程
使用 pkill 命令可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特定的进程,大部分选项与 pgrep 命令基本类似。
    -U 指定用户
    -t 指定终端 

image-20220527180522867

七、计划任务管理 at命令

一次性计划任务
在 Linux 操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定的日期执行预先计划的系统管理任务(如定期备份、定期采集监测数据)。CentOS 系统中默认已安装了 at、cronie 软件包,通过 atd 和 crond 这两个系统服务实现一次性、周期性计划任务的功能,并分别通过 at、crontab 命令进行计划任务设置。

at命令允许指定运行脚本时间,at的守护进程atd会以后台模式运行,检查系统上的一个特殊目录来获取at命令的提交的作业。默认情况下,atd守护进程每60秒检查一次目录。有作业时会检查作业运行时间,如果与当前时间匹配,则运行此作业。但需要注意,计划执行任务的时间、日期必须安排在当前系统的时刻之后,否则将无法正确设置计划任务。
设置一次性计划任务时,在 at 命令行中依次指定计划执行任务的时间、日期作为参数(若只指定时间则表示当天的该时间,若只指定日期则表示该日期的当前时间),确认后将进入带“at>”提示符的任务编辑界面,每行设置一条执行命令,可以依次设置多条语句,最后按 Ctrl+D 组合键提交任务。所设置的命令操作将在计划的时间点被依次执行。
at HH:MM yyyy-mm-dd(18:20 2022-05-27)
   Ctrl+d提交设置
atq 查询未执行的计划任务,不会出现已经执行过的
    [root@localhost ~]# atq
atrm 删除为执行的计划设置
    atrm 计划编号(用atq查询可获知)

image-20220527182702857

image-20220527183126476

八、crontab 周期性任务设置

crond 通过多个目录和文件设置计划任务,不同类型的任务由不同的配置文件来设置。

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

image-20220527183636322

/var/spool/cron/——用户 cron 任务的配置文件存放目录
由用户自行设置(使用 crontab 命令)的 cron 计划任务将被保存到目录/var/spool/cron/ 中,文件名与用户名相同。例如,通过如下操作可以得知,root 用户的 cron 计划任务保存在配置文件/var/spool/cron/root 中。

crond 守护进程会自动检查/etc/crontab 文件、/etc/cron.d/目录及 /var/spool/cron/目录中的改变,如果发现有配置更改,它们就会被载入内存,所以当某个 crontab 文件改变后并不需要重新启动 crond 守护进程就可以使设置生效

crontab命令

设置用户的周期性计划任务列表主要通过 crontab 命令进行,结合不同的选项可以完成不同的计划任务管理操作。常用的选项如下。
    crontab
    -e 编辑计划任务列表
    -u 指定所有管理的计划任务属于哪个用户,默认时针对当前用户,
    -l 列表显示计划任务
    -r 删除计划任务列表
    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服务

image-20220527184515814

注:数值需用空格隔开

符号{*”,“-”(减号)、“,”(逗号)、“/”(斜杠)}与数字构成表达式来表示较复杂的时间关系。
减号“-”:可以表示一个连续的时间范围,如“1-4”表示整数 1234。
逗号“,”:可以表示一个间隔的不连续范围,如“3, 4, 6, 8”。
斜杠符号“/”:可以用来指定间隔频率,如在日期字段中的“*/3”表示每隔 3 天。

image-20220527185307003

image-20220527185353974

在配置计划的时候,命令字建议使用绝对路径

image-20220527190030300

九、压力测试 stress

linux系统下,可以使用stress 命令主要用来模拟系统负载较高时的场景,在使用stress命令前需要先安装软件。

yum install -y epel-release
    //EPEL (Extra Packages for Enterprise Linux)是基于Fedora的一个项目,为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux.在Centos下使用yum安装时往往找不到rpm的情况,官方的rpm repository提供的rpm包也不够丰富,EPEL恰恰可以解决这两方面的问题,是为RHEL及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。
yum install -y stress //安装stress软件
stress 选项 [N数字]
    -c N  产生 N 个进程,每个进程都反复不停的计算随机数的平方根
    -i N  产生 N 个进程,每个进程反复调用 sync() 将内存上的内容写到硬盘上
    -m N  产生 N 个进程,每个进程不断分配和释放内存
    -m, --vm N             产生 N 个进程,每个进程不断分配和释放内存
    --vm-bytes B      指定分配内存的大小
    --vm-stride B     不断的给部分内存赋值,让 COW(Copy On Write)发生
    --vm-hang N      指示每个消耗内存的进程在分配到内存后转入睡眠状态 N 秒,然后释放内存,一直重复执行这个过程
    --vm-keep        一直占用内存,区别于不断的释放和重新分配(默认是不断释放并重新分配内存)
    -d               N 产生 N 个不断执行 write 和 unlink 函数的进程(创建文件,写入内容,删除文件)
    --hadd-bytes B   指定文件大小
    -t, --timeout N  在 N 秒后结束程序        
    --backoff N      等待N微妙后开始运行
    -q, --quiet      程序在运行的过程中不输出信息
    -n, --dry-run    输出程序会做什么而并不实际执行相关的操作
    --version        显示版本号
    -v, --verbose    显示详细的信息

image-20220528152748619

image-20220528161339232

image-20220528162446368

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值