进程与任务计划管理

本文深入探讨了操作系统中的进程和线程概念,详细阐述了进程的五种状态,包括新建、可运行、运行、阻塞和死亡,并解释了线程的工作原理和状态转换。此外,介绍了监控和管理进程的命令,如`ps`、`pgrep`、`kill`,以及`loadaverage`的含义和系统负载的重要性。还讲解了`cron`任务的设置和管理,为系统维护提供了全面的知识。
摘要由CSDN通过智能技术生成

目录

引言

进程状态

程序进程理论

线程工作原理

线程状态

Ps命令

load average 的含义

load average 数据

Pgrep命令查询进程

Pstree命令

Jobs命令

Kill命令

Crontab周期性任务设置


引言

什么是进程?我们先来了解一下进程的概念:我们知道操作系统最核心的概念就是进程。进程简单来说就是在操作系统中运行的程序,它是操作系统资源管理的最小单位。但是进程足一个动态的实体,它是程序的一次执行过程。进程和程序的区别在于:进程是动态的,程序是静态的,进程是运行中的程序,而程序是一些保存在硬盘上的可执行代码。

用windows来举例:

下面的meeting和播放组件都为爱奇艺客户端的子进程都是由主进程来进行创建的主进程的作用就是让他的子进程或者分任务给子进程,主进程也可称为守护进程。

这边给一个延申,在日常中会发现这么个情况

在这个文件中我写入了一些字符,当我继续对他进行更改,但是不保存的时候再次打开这个文件会出现:

它提示发现存在交换文件,在对他进行编辑不保存的情况下此文件其实是运行在内存中,对其保存后写入磁盘,因为我只对其进行了修改但是没有进行保存所以目前他还是以交换文件的形式存在,就会出现如上一些提示字符,只需要对其进行一步操作就可以解决:

在此界面输入d即可删除交换文件或者出去删除1.txt.swp文件效果也是一样的。

进程状态

程序:二进制文件,静态/bin/data,/usr/sbin/sshd。保存在硬盘,光盘介质中的可执行代码和数据。

进程:是程序运行过程,动态,有生命周期及运行状态。在cpu及内存中运行的程序代码且存在父子进程,每个进程又可以创建一个或多个进程。

这里又分为前台进程和后台进程

前台进程:用户可以操作的

后台进程:后台运行的进程,ps-aux,命令查看的就都是后台进程。

静态查看进程命令:

Ps-aux

Tail -f/var/log/messages

Tail命令是动态查看某个进程。

程序进程理论

线程背包含在进程之中,是进程中的实际运作单位,也是操作系统中能够独立运行的基本单位,也称作轻量进程,一个进程中可以并发多个线程,每条线程可以并行执行不同的任务,而我们在任务管理器中看到的一个个进程则是由我们下载的的应用程序所产生的,当然一个应用程序也可以包含多个进程,就比如下方的百度网盘,就运行四个就绪状态的后台进程,一下便是他们的大致管关系。

公司(程序)-----》部门(进程)--------》员工(线程)------》项目任务

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

线程工作原理

假设:单核单线程的cpu运行多个包含多线程的应用程序能否运行。

Cpu在运行中会存在一个周期,假设此周期为1s,如果是十个任务,是个线程,1s时间等同于被分为了10份,这里有个概念称为cpu时间分片,如果其只能运行一个进程,它会对时间进行划分,假设五个任务,每个任务时间为0.2s,每0.2s将资源给一个任务,即虽然是单核单线程也可以运行五个任务或更多。

线程状态

1.建(NEW) :新创建了一个线程对象。

2.可行(RUNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的st.art()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu的使用权。

3.运行(RUNNING):可运行状态(runnable)的线程获得了cpu时间片(timeslice),执行程序代码。

4.阻塞(BLOCKED):阻塞状态是指线程因为某种原因放弃了cpu使用权,也即让出了cpu timeslice,暂时停止运行。直到线程进入可运行(runnable)状态,才有机会再次获得cpu timeslice转到运行(running)状态。

阻塞的情况分三利:

(一),等待阻塞:运行(running)的线程执行o.wait()方法,JVw会把该线程放入等待队列(waitting queue)中.

(二),同步阻塞:运行(runing)的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JvM会把该线程放入锁池(Lockpool)中。

(三),其他阻塞:运行(running)的线程执行Thread.sleep(long

ms)或t.join()方法,或者发出了I/o求时,jvm会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时或者T/o处理完毕时,线程重新转入可运行(runnable)状态。

5.死亡(DEAD):线程run () 、 main ()方法执行结束,或者因异常退出了run ()方法,则该线程结束生命周期。死亡的线程不可再次复生

五种状态

新建à可运行à运行à阻塞à死亡

首先线程状态为创建,创建线程1,线程2这时候的线程是无法运行的,为了能让线程运行即为可运行状态,这时候线程1线程2放进线程池中即等待被调用,此处来了三个任务,这时候cpu会去线程池中拿去线程资源以此类推。

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

”回调":一个任务,多条线程同时执行

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

常用的参数:

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

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

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

Ps命令

  1. ps

每个任务都会有一个编号即为pid,它是系统识别任务的唯一途径

Tty:的含义为终端,即用户可以通过操作来影响系统的一个环境,其中pts/0的含义为终端的编号

Time:任务运行的时间

Cmd:哪个任务正在运行

  1. ps -aux    将以简单列表的形式显示出进程信息

进程状态

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

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

CPU:CPU 占用的百分比。

MEM:内存占用的百分比。

VSZ:该进程使用的棍拟内存量(KB)。

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

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

STAT;该进程的状态

D:不可中断的休眠状态

R:正在运行状态

S:处于休眠状态,可被唤醒

t:停止状态,可能是在后台暂停或进程处于跟踪调试状态

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

僵尸进程:

进程在结束后会回收进程资源

子进程回收线程,主进程回收子进程,最后主进程会将资源返回给cpu这是正常过程

这时候如果使用kill命令后主进程会直接消失,那么就剩下子进程和线程,当系统在压力不大的时候系统会回收子进程和线程,但是当系统压力过大的话它会漏掉子进程与线程那么这两个将会称为僵尸进程,它会持续在内存中运行但实际上此进程是无效的即为僵尸进程。

       这时候还会存在一个孤儿进程,同样还是在系统压力过大的情况,当线程被子系统回收后,子进程想要被回收只能通过主进程,但是当系统繁忙或者各种不可抗力因素的情况下主进程跳过了回收子进程的过程,直接将主进程回收后将会只剩下一个子进程,这就是所谓的孤儿进程,同样是无效但是会在内存中持续运行。

load average 的含义

平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数。和 CPU 使用率并没有直接的关系

一般的进程需要消耗 CPU、内存、磁盘I/O、网络I/O等资源,在这种情况下,平均负载就不是单独指的CPU使用情况。即内存、磁盘、网络等因素也可以影响系统的平均负载值。不过影响最大的是 CPU 使用率、CPU 等待和磁盘I/O。

一个机器的负载情况通常是通过 CPU 核数来判断的。当平均负载比 CPU 核数还大的时候,系统已经出现了过载。

如在单核处理器中,平均负载值为 1 或者小于 1 的时候,系统处理进程会非常轻松,即负载很低。当达到 3 的时候,就会显得很忙,达到 5 或者 8 的时候就不能很好的处理进程了(其中 5 和 8 目前还是个争议的阈值,为了保守起见,建议选择低的)。

0.00-1.00 之间的数字表示此时路况非常良好,没有拥堵,车辆可以毫无阻碍地通过。

1.00 表示道路还算正常,但有可能会恶化并造成拥堵。此时系统已经没有多余的资源了,管理员需要进行优化。

1.00-*** 表示路况不太好了,如果到达2.00表示有桥上车辆一倍数目的车辆正在等待。这种情况你必须进行检查了。

load average 数据

下面几个命令都可以看到 load average

  1. # top

Load average:平均负载值,此三个数值为第一分钟,第三分钟和第五分钟的cpu平均负载值。

PID:进程编号

USER:进程的持有用户

PR:进程运行的优先级,值越小优先级越高,会越早获取CPU的执行权

NI:进程的nice值,表示进程可被执行的优先级的修正数值

VIRT:进程使用虚拟内存,单位kb

RES:常驻内存,单位kb

SHR:进程使用的共享内存,单位kb

S:进程运行状态。(S:休眠;D:不可中断睡眠;R:运行中;T:跟踪/停止;Z:假死中)

%CPU:进行运行时CPU的占用比

%MEM:进程使用的内存占用比

TIME+:进程占用的CPU总时长

COMMAND:进程名

  1. # uptime

  1. # w

Pgrep命令查询进程

常用的参数

-l选项可以同时输出对应的进程名以及pid

-u:选项查询特定用户的进程

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

Pgrep 命令使用

  1. pgrep -l “log”

  1. pgrep -l -u lnj -t system

输出进程名和pid且指定用户的运行的特定的进程

Pstree命令

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

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

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

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

Pstree命令使用:

Pstree -aup

可以直接明了的查询此系统中进程关系

它正常情况下是和grep命令搭配使用

Pstree -aup | grep sshd

查看某个指定的进程

Jobs命令

查看处于系统后台的任务列表

-l:可以同时显示该进程对应pid号

Jobs命令运用

Tail -f /var/log/messages &命令是查看占用终端的前端进程&符号是将此命令调入后台运行,不会占用前端资源

Jobs -l因我刚刚将tail调入了后台

正常情况下使用kill就可以杀死后台进程

Kill 11463

将后台的进程恢复运行

使用bg命令,可以将后台中暂停执行的任务回复运行,继续在后台执行操作按快捷键ctrl=

使用fg命令,可以将后台任务重新恢复到前台运行

Jobs -l

Fg 1

Bg

Kill命令

终止进程命令

Kill -l

Kill加上如上的数字即可获得相应的功能

Pgrep和kill组合使用

Pgrep -l “sshd”

Kill 9477

使用killall命令终止进程

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

多编辑几个文件

Killall -9 vim

Jobs -l

使用pkill命令终止进程

使用pkill 命令可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特定的进程,大部分选项与pgrep 命令基本类似,如"-U”(指定用户)、"-t”(指定终端)等选项,使用起来非常方便。例如,若要终止由用户lnjj启动的进程(包括登录shell) ,可以执行以下操作。

Pkill -9 -U “lnj”

直接将lnj用户杀掉了即无法使用因为他将包含在lnj用户中的ssh服务也杀了,所以xshell也无法使用了。

Date命令

查看当下时间

Crontab周期性任务设置

crond通过多个目录和文件设置计划任务,不同类型的任务由不同的配置文件来设置。(1 ) l etcl crontab——系统任务配置文件

/etc/crontab文件中设置的是维护Linux操作系统所需的任务,Linux

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

[ rootlocalhost ~]# cat letc/ crontab

SHELL=/ bin/ bash   //设置执行计划任务的shel1环境

PATH-/ sbin : / bin : / usr/ sbin : /usr/bin   //定义可执行命令及程序的路径

MA工LTO=root  //将任务输出信息发送到指定用户的邮箱

根据/etc/cront.ab 配置文件中的设定,crond将按照不同的周期重复执行相应目录中的任务脚本文件。

( 2 ) /var/spool/cron/—用户 cron任务的配置文件存放目录

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

计划任务保存在配置文件/var/ spool/cron/root中。

Crontab任务配置的格式

分  取值为从0-59之间的任意数

时  取值为从0-23之间的任意数

日  取值为1-31之间的任意整数

月  取值为从1-12之间的任意整数

周 取值为0-7之间的任意整数,0或者7都可以代表星期日

Vim /etc/crontab查看系统配置文件

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

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

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

/指定间隔的时间频率

使用which命令查看绝对路径

应用举例

0 17 * * 1-5   周一到周五每天17:00

30 8 * * 1,3,5  每周一、三、五的8点30分

8-18/2 * * *   8点到18点之间每2小时

0 * */3 * *        每3天

案例:需要在每年的3月的星期二晚上10点每三分钟echo“123123” /opt/lnj/1.txt

*/3 22 * 3 2 echo“123123” /opt/lnj/1.txt

管理crontab计划任务

编辑计划任务crontab -e [-u用户名]

这里需要注意的是在使用命令时需要给到该命令的绝对路径。

查看计划任务crontab -l[-u用户名]

删除计划任务crontab -r [-u 用户名]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值