进程与计划任务

目录

 一、程序与进程

(一)什么是程序

(二)什么是进程

(三)进程和程序的区别

(四)进程、线程、协程

二、查看进程状态

(一)进程状态的种类

(二)命令之-----ps

(三)命令之-----prtstat

(四)命令之-----top

(五)命令之-----pgrep

(六)命令之-----pstree

(七)命令之-----lsof

(八)命令之-----vmstat

(九)命令之-----free

(十)命令之-----iostat

(十一)命令之-----pmap

(十二)命令之-----pidof

三、进程管理

(一)进程的启动

(二)命令之------&、ctrl + z 

(三)结束进程

1.命令之-----kill

信号1:SIGHUP

信号9:SIDKILL

信号15:SIDTERM

2.命令之-----killall

3.命令之-----pkill

四、计划任务

(一)命令之----at

(二)命令之-----crontab


 一、程序与进程

(一)什么是程序

程序在计算机科学领域中,指的是为完成特定任务而编写的指令序列。它是一组有序的计算机操作说明,这些说明以某种编程语言编写,并且可以被计算机系统解释或编译执行。

程序设计的目标是让计算机按照预定的方式处理数据、控制硬件设备以及实现复杂的逻辑功能。当一个程序运行时,它会占据内存空间,根据指令集进行计算和控制流程,从而完成诸如数值计算、文件操作、用户交互、网络通信等各种任务。

从更抽象的角度来看,程序不仅包括了计算机软件层面的具体代码,也涵盖了其背后的设计思想、算法实现及问题解决方案的整体框架。在现代操作系统环境下,程序还可以进一步划分为进程和线程等概念,用来描述程序执行过程中的实体及其并发行为。

(二)什么是进程

进程(Process)是计算机操作系统中一个正在运行的程序实例,它是系统资源分配和调度的基本单位。在操作系统内核管理下,每个进程都有独立的内存空间、程序计数器(PC)、寄存器集合以及其他系统资源,如打开的文件描述符等。

1.内存空间:进程有自己的地址空间,使得不同进程之间互不影响,确保了数据的安全性和稳定性。

2.执行状态:进程可以处于运行态、就绪态、阻塞态等多种状态,由操作系统的进程调度器负责在不同状态间进行切换。

3.生命周期:进程有一个完整的生命周期,包括创建、执行、暂停、恢复、等待、终止等阶段。

4.并发执行:多任务环境下的多个进程可以并发执行,通过CPU时间片轮转机制实现看似同时处理多个任务的效果。

(三)进程和程序的区别

进程与程序的区别在于,程序是静态的、存储在磁盘上的指令集,而进程则是这些指令在系统中被加载并执行时的一个动态实体。同一程序可以启动多个不同的进程,各自拥有独立的数据和控制流。

(四)进程、线程、协程

进程(Process)

  • 进程是操作系统进行资源分配和调度的基本单位,它包含了程序代码、数据集、堆栈以及内核分配给进程的系统资源。每个进程拥有独立的内存空间和系统资源,可以看作是一个在计算机上运行的程序实例。

线程(Thread)

  • 线程是进程中执行指令流的实体,一个进程至少包含一个主线程。同一进程中的多个线程共享相同的地址空间(包括代码段、数据段等),它们能够访问同样的全局变量和系统资源,但有自己的寄存器上下文(如程序计数器PC)和栈空间。
  • 多线程技术允许在一个进程中同时执行多个不同的控制流,从而提高系统的并发性和响应速度。

可以在proc目录下查看一个程序是单线程还是多线程

图中我们可以看到,蓝色的数字文件夹代表进程的PID号

进程与计划任务_第1张图片

我们随便找一个PID号查看一下

进程与计划任务_第2张图片

进程与计划任务_第3张图片

协程(Coroutine)

  • 协程是一种用户态轻量级线程实现,与操作系统内核管理的线程不同,协程由应用程序自身控制其调度,无需内核上下文切换开销。
  • 在一个进程中可以创建多个协程,协程之间通过协作式调度机制交替执行,当一个协程主动让出执行权时,另一个协程才能得到执行机会。
  • 协程保留了上次挂起点的状态信息,因此恢复执行时能从上次离开的地方继续,而不是重新开始执行。这使得协程特别适用于处理大量IO操作或需要保持状态的任务,比如事件驱动编程、异步I/O等场景

二、查看进程状态

(一)进程状态的种类

系统进程有五种不同的状态

1.R(运行):正在运行或在运行队列中等待。
2.S(中断):休眠中,在等待某个条件的形成或接受到信号
3.D(不可中断):收到信号不唤醒和不可运行,进程必须等待直到有中断发生。
4.Z:(僵死):进程已终止,但进程描述符存在,直到父进程调用 wait40系统调用后释放。
5.T:(停止):进程收到 SIGSTOP,SIGSTP,SIGTIN,SIGTOU 信号后停止运行。

(二)命令之-----ps

语法:ps 【选项】

作用:静态查看进程的状态信息统计结果

选项:

常用选项

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

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

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

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

  • -l:使用长(Long)格式显示进程信息。

  • -f:使用完整的(Full)格式显示进程信

  • k|--sort 属性 对属性排序,属性前加 - 表示倒序 ps aux k -%cpu

  • o 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem

比如我们查看系统中所有的进程信息,并显示出该进程的用户名

那么需要输入ps  aux 

进程与计划任务_第4张图片

给大家总结一下信息栏上的字母代表的含义

USER 进程的所有者
PID 进程ID号
%CPU 运算器占用率
%MEM 内容占用率
VSZ 虚拟内存使用量(单位是KB)
RSS 占用的固定内存量(单位是KB)
TTY 所在终端
STAT 进程状态
START 被启动的时间
TIME 实际使用时间
COMMAND 命令名称与参数
STAT进程状态。常见的状态有以下几种:                                                                                                                                                                                                

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

-R:该进程正在运行。

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

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

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

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

-Z:僵尸进程。进程已经中止,但是还是占用硬件资源。

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

-N:低优先级。

-L:被锁入内存。

-s:包含子进程。

-l:多线程(小写 L)。

-+:位于后台。

如果不想看到所有的进程,只想查看一下当前登录产生了哪些进程,那只需使用 "ps -l" 命令

进程与计划任务_第5张图片

如果我们想看某一个用户的进程信息

那么需要输入ps  aux  | grep  "^avaih"  

查看用户时,需要加o选项显示用户名,再使用grep筛选

进程与计划任务_第6张图片

也可以指定参数查看,查看进程的特定属性输入ps axo pid,cmd,%mem,%cpu,use

比如只想看PID号CPU信息

我们可以输入 ps  axo pid,%cpu进行查看

进程与计划任务_第7张图片

cpu排序查看

输入  ps  aux  k  (-)%cpu  :不加-表示从小到大排序;加-表示从大到小排序

进程与计划任务_第8张图片

内存排序查看

进程与计划任务_第9张图片

(三)命令之-----prtstat

语法:prtstat  进程PID号

作用:查看进程信息

进程与计划任务_第10张图片

(四)命令之-----top

语法:top  

作用:动态查看进程信息

进程与计划任务_第11张图片

行数 内容 说明
第一行top 14:04:48 系统当前时间
up6:38 系统的运行时间.本机己经运行 6小时 38 分钟
3 users 当前登录了两个用户
load average: 0.00,0.01,0.05 系统在之前 1 分钟、5 分钟、15 分钟的平均负载。如果 CPU 是单核的,则这个数值超过 1 就是高负载:如果 CPU 是四核的,则这个数值超过 4 就是高负载 (这个平均负载完全是依据个人经验来进行判断的,一般认为不应该超过服务器 CPU 的核数)
第二行 Tasks 200 total 系统中的进程总数
2 running 正在运行的进程数,2个正在运行
198 sleeping 睡眠的进程数
0 stopped 正在停止的进程数
0 zombie 僵尸进程数。如果不是 0,则需要手工检查僵尸进程
第三行Cpu(s) 0.1 us 用户模式占用的 CPU 百分比 个人用户开启的进程占用的 cpu 率
0.0 sy 系统模式占用的 CPU 百分比
0.0 ni 改变过优先级的用户进程占用的 CPU 百分比
99.9 id 空闲 CPU 占用的 CPU 百分比
0.0 wa 等待输入/输出的进程占用的 CPU 百分比 1
0.0 hi 硬中断请求服务占用的 CPU 百分比
0.0 si 软中断请求服务占用的 CPU 百分比
0.0 st st(steal time)意为虚拟程序占用 cpu 时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比
第四行 Mem 1867048 total 物理内存的总量,单位为KB
815642 free 空闲的物理内存数量
815632 used 己经使用的物理内存数量
963888 buffchche 作为缓冲的内存数量
 第五行Swap   5238780 total 交换分区(虚拟内存)的总大小
5225332 free 空闲交换分区的大小
13448 used 已经使用的交换分区的大小
813352 avail Mem 作为缓存的交换分区的大小

top 命令的第二部分输出,主要是系统进程信息,各个字段的含义如下:

- PID:进程的 ID。
- USER:该进程所属的用户。
- PR:优先级,数值越小优先级越高。
- NI:优先级,数值越小、优先级越高。
- VIRT:该进程使用的虚拟内存的大小,单位为 KB。
- RES:该进程使用的物理内存的大小,单位为 KB。
- SHR:共享内存大小,单位为 KB。
- S:进程状态。
- %CPU:该进程占用 CPU 的百分比。
- %MEM:该进程占用内存的百分比。
- TIME+:该进程共占用的 CPU 时间。
- COMMAND:进程的命令名。

我们可以在top界面进行排序查看

①P 键:根据CPU使用百分比大小进行排序

②M 键:根据驻留内存大小进行排序

③N 键:根据启动时间进行排序

④c 键:切换显示命令名称和完整命令行

⑤h 键:可以获得 top程序的在线帮助信息

⑥k 键:根据提示输入指定进程的 PID 号并按 Enter 键终止对应的进程

⑦q 键:退出 top 程序

⑧数字1 键:显示CPU个数和状态

(五)命令之-----pgrep

语法:pgrep  【选项】 用户名

作用:查找某个用户的进程

选项:

-l: 显示进程名

-U:指定用户

-a:显示完整格式的进程名

-P: pid: 显示指定进程的子进程

进程与计划任务_第12张图片

注意:-U后面要跟用户名,而后再添加其他选项,或则把该选项放在最后,否则识别不了用户名。

如果我们想查看当前用户运行了多少程序,可以通过pgrep命令查看

(六)命令之-----pstree

​语法:pstree  【选项】【用户名】

作用:以树形结构列出进程信息

选项

-a:显示完整信息
-u:列出对应用户名
-p:列出对应PID号

pstree -aup  以树形结构完整列出对应用户名及进程号

进程与计划任务_第13张图片

实验:解决僵尸进程

一个进程有父进程还有子进程,子进程结束,会将自己的数据交给父进程,但是父进程意外终端,子进程还在,数据无法交出,系统会认为该子进程还在运行。

我们来做个实验,首先模拟一个僵尸进程

进程与计划任务_第14张图片

可以看到,我们之前使用的kill命令杀死进程号56550时,并没有彻底杀死

进程与计划任务_第15张图片

上图可以发现,僵尸进程占用的CPU和内存,很小,用0表示,基本不会有什么影响,想要删除的话,需要重启进程,或者重新启动系统

实验二:如何快速找到cpu利用率过高的程序

首先,我们模拟内存占满

进程与计划任务_第16张图片

假设dd是一个病毒程序,如果我们只杀死进程,过一会,它还会重新启动,我们只能删除这个程序,这时候,我们需要找到它的绝对路径所在。通过PID号找到它

切换到该进程号的目录,查看exe链接文件指向位置,就是绝对路径,然后去删除它就可以了

进程与计划任务_第17张图片

(七)命令之-----lsof

语法:lsof  【选项】 

作用:显示已经打开的文件、恢复误删除的文件

-c 字符串:只列出以字符串开头的进程打开的文件

+d 目录名:列出某个目录中所有被进程调用的文件

-u 用户名:只列出某个用户的进程打开的文件

-p pid :列出某个 PID 进程打开的文件。

查看一个用户的进程

输入:lsof  -u  用户名

进程与计划任务_第18张图片

恢复误删除的文件

前提是有其它终端在占用这个文件

首先新建一个文件,并在里面输入一些内容

进程与计划任务_第19张图片

使用另一个终端打开它

进程与计划任务_第20张图片

现在来删除它

进程与计划任务_第21张图片

使用lsof命令,过滤出该文件的进程号

找到文件的路径

进程与计划任务_第22张图片

(八)命令之-----vmstat

语法:vmstat  【选项】

作用:用于报告虚拟内存统计信息,包括物理内存、虚拟内存、进程、CPU活动等系统整体状态

选项:

-fs:

-f:显示从启动到目前为止,系统复制(fork)的程序数,此信息是从 /proc/stat 中的 processes 字段中取得的。 -s:将从启动到目前为止,由一些事件导致的内存变化情况列表说明。

进程与计划任务_第23张图片

-S 单位:令输出的数据显示单位,例如用 K/M 取代 bytes 的容量。

字段 含义
procs 进程信息字段: -r:等待运行的进程数,数量越大,系统越繁忙。 -b:不可被唤醒的进程数量,数量越大,系统越繁忙。
memory 内存信息字段: -swpd:虚拟内存的使用情况,单位为 KB。 -free:空闲的内存容量,单位为 KB。-buff:缓冲的内存容量,单位为 KB。-cache:缓存的内存容量,单位为 KB。
swap 交换分区信息字段: -si:从磁盘中交换到内存中数据的数量,单位为 KB。 -so:从内存中交换到磁盘中数据的数量,单位为 KB。这两个数越大,表明数据需要经常在磁盘和内存之间进行交换,系统性能越差。
io 磁盘读/写信息字段: -bi:从块设备中读入的数据的总量,单位是块。 -bo:写到块设备的数据的总量,单位是块。这两个数越大,代表系统的 I/O 越繁忙。
system 系统信息字段: -in:每秒被中断的进程次数。 -cs:每秒进行的事件切换次数。这两个数越大,代表系统与接口设备的通信越繁忙。
cpu CPU信息字段: -us:非内核进程消耗 CPU 运算时间的百分比。 -sy:内核进程消耗 CPU 运算时间的百分比。 -id:空闲 CPU 的百分比。 -wa:等待 I/O 所消耗的 CPU 百分比。 -st:被虚拟机所盗用的 CPU 百分比

-d:列出硬盘有关读写总量的统计表。

进程与计划任务_第24张图片

-p 分区设备文件名:查看硬盘分区的读写情况。

还可以指定输出间隔时间和次数

进程与计划任务_第25张图片

(九)命令之-----free

语法:free  【选项】

作用:查看内存情况

选项:

-h:在输出结果中自动采用合适的单位进行显示(人类可读格式)

进程与计划任务_第26张图片

-t:在输出结果底部添加一行总和

进程与计划任务_第27张图片

-s:连续输出内存使用情况,每秒更新一次,直到手动停止(Ctrl+C)

进程与计划任务_第28张图片

(十)命令之-----iostat

语法:iostat  【选项】

作用:用于收集和报告CPU使用情况以及磁盘I/O统计信息

选项:

进程与计划任务_第29张图片

-c:显示CPU使用率统计。

-d:显示设备〈磁盘)使用状态

进程与计划任务_第30张图片

-t:在输出中包括时间戳

进程与计划任务_第31张图片

-x:在输出中包括扩展的磁盘指标

进程与计划任务_第32张图片

(十一)命令之-----pmap

语法:pmap 进程号

作用:查看进程占用 内存的详细信息

进程与计划任务_第33张图片

(十二)命令之-----pidof

语法:pdiof  程序名

作用:查询已知程序名不知道pid号

进程与计划任务_第34张图片

三、进程管理

进程管理是操作系统的核心功能之一,它涉及到对计算机系统中运行的进程进行创建、调度、同步、通信、终止等一系列操作

(一)进程的启动

进程需要手动启动,启动后一般分为前台和后台,之前我们说过程序前台运行和后台运行,前台运行会一直占用终端,直到运行结束,影响当前操作,那么把命令放入后台启动,会立即释放终端就会方便很多。

(二)命令之------&、ctrl + z 

首先我们来运行两个程序

进程与计划任务_第35张图片

第一个命令通过&直接放到后台

第二个命令top动态查看进程状态,会影响当前操作,需要按ctrl +c结束,我们可以按ctrl +z,使命令停止并调到后台,可以通过jobs来查看

使用fg、bg调用前后台 

fg  job序号

bg  job序号

进程与计划任务_第36张图片

终止作业:kill + %job序号

进程与计划任务_第37张图片

&还可以使命令并行执行

进程与计划任务_第38张图片

(三)结束进程

1.命令之-----kill

语法:kill  【参数、信号】 【进程ID号】

作用:kill 是用来向进程发送信号的命令。通过指定进程ID(PID),你可以指示操作系统停止、暂停或恢复进程。

可以通过kill -l 来查看信号都有哪些

进程与计划任务_第39张图片

下面,就挑一些常用的信号来讲解一下

信号1:SIGHUP

该信号表示挂起信号,最初设计用于通知进程挂起并重新读取配置文件,现代应用通常将它用作重启服务的信号。

进程与计划任务_第40张图片

进程与计划任务_第41张图片

信号9:SIDKILL

强制退出:kill  -9 进程或任务的ID号

一旦发送给某个进程,该进程将立即被操作系统强行终止,没有机会执行任何清理操作或者保存状态信息。常被用来终止无响应或陷入死循环的进程

信号15:SIDTERM

正常结束进程,最常用的终止信号,请求进程停止运行。接收到这个信号的进程通常会尝试清理资源并优雅地退出。是 kill 命令的默认信号。

一般会等待最后一个访问用户退出时结束任务,在执行15信号后不会再添加新的访问信息

2.命令之-----killall

语法:killall 【选项】【信号】 进程名

作用:结束该进程名的所有进程

-i:表示会寻问,-l:忽略大小写

进程与计划任务_第42张图片

3.命令之-----pkill

用法与killall一致,都是通过进程名杀死进程

四、计划任务

(一)命令之----at

语法:at  时间

作用:用于安排一次性执行的任务。at命令主要用于安排在指定的未来某个时间点运行一次性的命令或脚本。

进程与计划任务_第43张图片

如果需要过几天是需要输入完整的时间,可以输入atq查看计划列表

进程与计划任务_第44张图片可以通过atrm命令删除指定任务  输入 atrm 任务序号

进程与计划任务_第45张图片

(二)命令之-----crontab

语法:crontab  【选项】

作用:crontab是Linux系统中用于配置和管理定时任务的命令。通过crontab,用户可以定义计划在特定时间或周期性执行的任务

选项:

-e:编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。

输入crontab  -e 进入编辑界面

项目 含义 范围
第一个"*" 一小时当中的第几分钟(minute) 0~59
第二个"*" 一天当中的第几小时(hour) 0~23
第三个"*" 一个月当中的第几天(day) 1~31
第四个"*" 一年当中的第几个月(month) 1~12
第五个"*" 一周当中的星期几(week) 0~7(0和7都代表星期日)

此次编辑内容意思为,每个月15号的12点30分会在/data下建立一个名字叫abk的文件

进程与计划任务_第46张图片

-l :显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。

进程与计划任务_第47张图片-r:从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件

进程与计划任务_第48张图片

在编辑界面里有一些符号有特殊的含义

特殊符号 含义
*(星号) 代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思。
,(逗号) 代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。
-(中杠) 代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。
/(正斜线) 代表每隔多久执行一次。比如"*/10命令",代表每隔 10 分钟就执行一次命令。

进程与计划任务_第49张图片

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

1. 6 个选项都不能为空,必须填写。如果不确定,则使用“*”代表任意时间。
2.crontab 定时任务的最小有效时间是分钟,最大有效时间是月。像 2018 年某时执行、3 点 30 分      30 秒这样的时间都不能被识别。
3.在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都以天为单位,非常容易     让管理员混淆。
4.在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径。有时使用相对     路径的命令会报错。

你可能感兴趣的:(linux,运维,服务器)