【linux命令(八):进程和计划任务】

文章详细介绍了Linux系统中的进程、线程和协程的概念及区别,包括它们的状态、调度和通信方式。此外,还列举了一系列用于监控系统资源和进程的命令,如ps、top、vmstat、iostat等,并提到了进程状态的转换和分类。
摘要由CSDN通过智能技术生成

liunx系统中的进程

在 Linux 系统中,进程是正在运行的程序的实例。每个进程都是系统资源的拥有者,包括内存、文件描述符、文件系统和其他运行时资源。Linux 操作系统使用进程作为管理和调度任务的基本单位,以实现多任务处理和资源隔离。

进程标识符(PID):每个进程在系统中都有一个唯一的标识符,称为进程标识符(PID)。PID 是一个正整数,用于在系统中唯一标识一个进程

状态:进程可以处于不同的状态,包括==运行(Running)、就绪(Ready)、阻塞(Blocked)==等。操作系统根据进程的状态进行进程调度和资源管理。

进程控制块(PCB):每个进程都有一个进程控制块(PCB),用于存储进程的状态信息、上下文和其他相关信息。PCB 包含进程的 PID、状态、程序计数器、寄存器等。

父子关系:进程可以通过创建子进程来执行不同的任务。每个进程都有一个父进程(除了初始化进程),linux7 pid为1 类似祖宗进程是systemd
停止父进程,再杀死子进程,子进程会进入僵尸状态。(占用进程资源)

进程调度:Linux 操作系统使用调度算法来决定哪个进程获得 CPU 时间片并运行。调度算法的目标是提供公平的 CPU 分配,使得所有进程都有机会获得 CPU 时间

进程间通信:Linux 提供了多种进程间通信(IPC)机制,包括管道、消息队列、共享内存、信号量等,用于进程之间的数据传递和共享

进程资源管理:Linux 操作系统使用进程的优先级、调度策略和资源限制来管理系统资源的分配,以确保系统的稳定性和性能。

前台进程和后台进程:前台进程是在终端中运行的进程,可以与用户交互;后台进程是在后台运行的进程,不与用户交互,可以继续在终端中执行其他任务。

  1. 命令 加 & 放入后台
  2. jobs 后台执行的命令 查看列表、编号
  3. fg 加编号 把任务调回前台
  4. ctrl +z 把命令放回后台任务 但是 是停止状态
  5. bg 加编号 重新开始后台任务

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

切换到前台运行作业:
fg %2

切换到后台继续运行作业:
bg %2

kill 命令的相关知识看进程管理

进程、线程、协程

进程(Process)

进程是计算机中的基本执行单元,每个进程都有自己独立的地址空间和系统资源,如内存、文件描述符等。
进程之间相互独立,不共享内存空间,需要通过进程间通信(IPC)来进行数据交换。
进程切换开销较大,因为需要切换整个进程的上下文信息。
进程之间可以并发执行,适合在多核系统上利用多核资源。
线程(Thread):

线程是进程的一部分,多个线程共享同一个进程的地址空间和系统资源。
线程之间共享内存,可以直接读写进程中的全局变量,因此线程间通信较为方便。
线程切换开销较小,因为只需要切换线程的上下文信息,不需要切换整个进程。
线程之间可以并发执行,适合在多核系统上利用多核资源。
协程(Coroutine):

协程是一种轻量级的线程,由用户控制调度,而不是由操作系统调度。
协程是在同一个线程中运行的,不需要切换线程上下文,因此切换开销极小。
协程之间共享状态,可以直接访问彼此的数据,但不会导致资源竞争。
协程一般在一个线程中顺序执行,可以用于编写高效的并发代码,适用于 I/O 密集型任务。

总结
进程适合处理资源独立的任务,各个进程之间独立运行,需要通过 IPC 进行通信。
线程适合在一个进程中并发执行任务,各个线程共享进程的资源,可以直接读写进程内的数据。
协程适合编写高效的并发代码,由用户控制调度,不需要线程切换开销,适用于 I/O 密集型任务。

在这里插入图片描述

进程状态

进程的基本状态
在这里插入图片描述

  • 创建状态(Created):进程在创建时需要申请一个空白PCB(process control block进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态
  • 就绪状态(Ready):进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行
  • 执行状态(Running):进程处于就绪状态被调度后,进程进入执行状态
  • 阻塞状态(Blocked):正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用
  • 终止状态(Terminated):进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行
  • 挂起(Suspended):进程处于挂起状态,暂时不会被调度执行,可以通过某些操作重新恢复。

进程在运行过程中会根据不同的情况发生状态的转换,这些转换是动态的,可以理解为进程的生命周期。下面是进程状态之间转换的一些常见情况:

  • 创建 -> 就绪:当进程被创建后,系统为其分配资源并将其放入就绪队列等待调度。
    就绪 -> 运行:当系统调度器选择了某个就绪进程并分配 CPU 给它时,进程由就绪状态转换为运行状态。
    运行 -> 阻塞:当进程发起某些 I/O 操作或等待某个事件时,它可能会由于等待而被挂起,转换为阻塞状态。
    阻塞 -> 就绪:当进程等待的事件发生,例如 I/O 完成,它会从阻塞状态转换回就绪状态。
    运行 -> 终止:当进程完成了它的任务或者因为某个原因被终止,它会从运行状态转换为终止状态。
    就绪/运行/阻塞 -> 挂起:当进程被挂起,暂时不会被调度执行,可以通过某些操作(如恢复信号)将其恢复为原来的状态。

进程分类

  • 前台进程和后台进程:
    前台进程:在终端中运行的进程,会向终端输出信息,同时可以接收终端的输入。
    后台进程:在终端中运行,但不会向终端输出信息,通常用 “&” 将命令放到后台执行。

  • 交互式进程和批处理进程:
    交互式进程:与用户交互并接受用户输入,通常在终端中运行,并等待用户输入指令。
    批处理进程:无需用户干预,自动执行一系列指令,通常通过脚本文件实现。

  • 前台线程和后台线程:
    前台线程:在进程的前台运行,可以与其他线程共享同一进程的资源。
    后台线程:在进程的后台运行,通常用于执行后台任务,不会影响前台线程的执行。

  • 实时进程和普通进程
    实时进程:
    具有实时性要求的进程,优先级较高,通常用于响应性要求较高的任务。
    普通进程:没有实时性要求,根据系统调度策略进行调度。
    守护进程
    守护进程是在后台运行的特殊进程,通常在系统启动时启动,没有终端连接,独立于用户登录。
    守护进程负责在后台执行特定的系统任务,如网络服务、日志记录等。
    孤儿进程和僵尸进程:

  • 孤儿进程:父进程退出后,子进程还在运行,但其父进程已不存在,此时操作系统将它的父进程设置为 init 进程。
    僵尸进程:子进程退出后,其退出状态还未被父进程处理,此时子进程被称为僵尸进程。

  • 可中断进程和不可中断进程:
    可中断进程:可以响应信号,如终止信号,可以被中断或终止。
    不可中断进程:不能被中断或终止,通常用于处理关键任务,如 I/O 操作。

linux系统中和进程相关的命令

以下命令来查看进程的相关信息

  1. ps:用于显示当前正在运行的进程状态
  • ps aux:显示所有用户的所有进程信息。
  • ps -ef:与 ps aux 类似,但输出格式稍有不同。
  • ps -e:显示当前系统中所有的进程。
  • ps -l:显示进程的详细信息,包括进程状态、CPU 占用率等。
  • ps -p :显示指定进程 ID (PID) 的详细信息。
  1. top:实时显示系统中进程的状态和资源占用情况
  • 在终端中输入 top 命令,将显示按 CPU 占用率排名的进程列表,以及系统的负载情况。
  1. htop:类似于 top,但提供更加友好的交互式界面
  • 需要先安装 htop,然后在终端中输入 htop 命令。
  1. pstree:以树状图形式显示进程之间的关系
  • 在终端中输入 pstree 命令,将显示当前系统的进程树。
  1. top、htop 和 pstree 命令可以用 q 键退出。

以下命令来查看五大性能指标,也称为“五个大类”:

  1. CPU 使用情况
  • top:实时显示系统中进程的 CPU 占用情况,按 CPU 使用率排序。
  • htop:类似于 top,提供更友好的交互式界面,实时显示 CPU 使用率和进程信息。
  • mpstat:显示 CPU 的平均使用情况和每个核心的使用情况。
  • sar:系统资源历史报告,可以用于查看 CPU 使用率的历史数据。
  1. 内存使用情况
  • free:显示系统内存的使用情况,包括总内存、已用内存、空闲内存、缓存等。
  • vmstat:显示虚拟内存的统计信息,包括内存使用情况、交换空间使用情况等。
  1. 磁盘 I/O 情况
  • iostat:显示 CPU 和设备 I/O 统计信息,包括磁盘和其他块 设备的使用情况。
  • iotop:实时显示磁盘 I/O 的信息,按磁盘读写速度排序。
  1. 网络使用情况
  • ifconfig:显示网络接口的配置信息,包括 IP 地址、子网掩码、网关等。
  • netstat:显示网络连接和路由表等信息。
  • nload:实时显示网络流量的信息,按网络接口排序。
  1. 进程状态和负载情况
  • ps:显示当前正在运行的进程状态。
  • top 或 htop:实时显示系统中进程状态和资源占用情况,包括 CPU 占用率、内存使用率等。
  • uptime:显示系统的负载情况,包括 1 分钟、5 分钟和 15 分钟的负载平均值。
系统版本:  cat/etc/redhat-release
ip地址 :  ifconfig
内核版本:  uname -r
DNS:     cat /etc/resolv.conf
网关:    route -n (ip地址)  / ip route

vmstat 动态监控系统资源

#vmstat [-a] [刷新延时 刷新次数]
#vmstat [选项]
.
#vmstat 1 3
#使用vmstat检测,每隔1秒刷新一次,共刷新3次

在这里插入图片描述

查看进程的相关命令

PS命令

ps 即 process state,可以查看进程当前状态的快照(查看静态的进程统计信息),默认显示当前终端中的进程,Linux系统各进程的相关信息均保存在/proc/数字 目录/status 下的文件中

格式:ps [options]

相关选项:

命令格式说明示例示例
ps显示当前用户的所有进程信息ps
ps aux显示所有进程的详细信息,与 -ef 类似,但输出格式略有不同ps aux
ps -ef显示所有进程的详细信息,包括用户、进程ID、父进程ID、CPU 占用率等ps -ef
-f:使用完整的(Full)格式显示进程信
ps -l长格式显示进程信息,包括进程状态、优先级等ps -l
ps -u username显示指定用户的进程信息ps -u username
ps -p pid显示指定进程ID的信息ps -p pid
ps k -%cpu根据 CPU 占用率对进程排序(倒序)ps aux k -%cpu
ps o属性… 显示定制的信息,可以指定要显示的属性,例如 pid、cmd、%cpu、%mem 等ps aux o pid,cmd,%cpu,%mem

示例:

查看用户名为lisi的进程
#ps -u lisi aux 或者 pgrep -l -U lisi
.
查看进程的特定属性
#ps axo pid,cmd,%mem,%cpu
.
按CPU利用率倒序排序
ps aux k -%cpu
模拟cpu忙
dd if=/dev/zero of=/dev/null
.
排序,查找占用最多内存和CPU的进程
#ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
#ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head

找到未知进程的执行程序文件路径
#ps aux k -%cpu |head
#ll /proc/26314/exe
#touch a;chattr +i a

top命令

top命令是一个用于查看系统实时进程和系统资源使用情况的命令。它会动态地显示当前运行的进程列表,并实时更新各个进程的资源占用情况,包括CPU使用率、内存使用率、进程ID、运行时间等。

在这里插入图片描述
上面的输出包含了以下信息:

上半部分:

  1. 服务器运行时间和负载平均值。(任务队列信息)
  2. 进程相关统计信息,包括运行中的进程、睡眠中的进程、停止的进程等。(进程信息)
  3. CPU使用率信息,包括用户态、系统态、空闲时间等。(CPU信息)
  4. 内存使用情况,包括总内存、可用内存、缓存和交换空间等。(物理内存信息)
  5. 运行中的进程列表,包括进程ID、用户、CPU使用率、内存使用率、运行时间和进程命令等。(交换分区(swap)信息)

缓冲(buffer)和缓存(cache)的区别:

  • 缓存(cache)是在读取硬盘中的数据时,把最常用的数据保存在内存的缓存区中,再次读取该数据时,就不去硬盘中读取了,而在缓存中读取。
  • 缓冲(buffer)是在向硬盘写入数据时,先把数据放入缓冲区,然后再一起向硬盘写入,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。

下半部分:

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

按q键退出top命令。

选项描述
-d <秒数>指定刷新间隔时间,即每隔多少秒更新一次数据。
-n <次数>指定更新数据的次数后自动退出。
-b以批处理模式运行,将输出结果保存到文件而不显示在终端上。
-c显示完整的命令行,包括路径和参数。
-i 或 --ignore-case在排序时忽略大小写。
-o <排序字段>按指定的字段进行排序,例如 %CPU、%MEM、TIME+ 等。
-p <进程ID>显示指定进程ID的详细信息。
-u <用户名>只显示指定用户名的进程。
-U <用户名>只显示指定用户名的进程,并且不显示其他用户的进程。
H在显示进程时,将子进程也一并显示出来。
Z显示僵尸进程信息。
k向指定的进程发送信号以进行操作,例如终止进程。

pgrep命令

pgrep 命令用于通过进程名或其他属性查找进程的进程ID(PID)。它可以根据进程名、用户、组、父进程ID、会话ID等条件来搜索进程。pgrep 命令常用于通过进程名查找进程的PID,并与其他命令结合使用,例如 kill 命令来结束指定进程。

相关选项:

选项描述
-a显示完整的命令行,包括路径和参数。
-l显示与进程ID相对应的进程名。
-u <用户名>显示指定用户名的进程。
-U <用户名>显示指定用户名的进程,并且不显示其他用户的进程。
-g <组名>显示指定组名的进程。
-G <组名>显示指定组名的进程,并且不显示其他组的进程。
-s <会话ID>显示指定会话ID的进程。
-t <终端名称>显示指定终端名称的进程。
-P <父进程ID>显示指定父进程ID的进程。
-n显示最新的进程ID(PID),即显示最近创建的进程ID。
-o显示最旧的进程ID(PID),即显示最早创建的进程ID。
-x显示与指定条件完全匹配的进程。
-d <分隔符>指定输出时的分隔符,例如使用逗号 , 或空格来分隔多个PID。

示例:

显示进程名
pgrep -l “log”
.
指定用户
pgrep -l -U zhangsan
.
pidof #根据进程名 来找pid号

pstree进程树

pstree 命令用于显示当前系统中运行的进程树,以树状结构展示进程之间的关系。它可以帮助你更直观地了解进程之间的层级关系,包括父进程、子进程和兄弟进程。

pstree [OPTION] [ PID | USER ]

常用选项
-a 显示启动每个进程对应的完整指令,包括启动进程的路径、参数等
-p 显示PID
-T 不显示线程thread,默认显示线程
-u 显示用户切换
-H pid 高亮显示指定进程及其前辈进程

#查看用户名为 “john” 的进程树:
pstree -u john
.
#查找包含 “nginx” 关键字的进程树
pstree | grep nginx
.
#查看进程号为1的进程
pstree 1
.
#高亮
pstree -pH 1780

#查询系统中所有进程调用的文件
#lsof | more

查看内存的相关命令

free

free 命令用于显示系统的内存使用情况,包括物理内存和交换空间(虚拟内存)。它显示系统中的内存总量、已使用内存、空闲内存以及缓存和缓冲区的使用情况。

运行 free 命令时,输出会包含以下信息:

在这里插入图片描述

  1. total: 总的物理内存大小。
  2. used: 已使用的物理内存大小。
  3. free: 空闲的物理内存大小。
  4. shared: 被共享使用的物理内存大小。
  5. buff/cache: 缓存和缓冲区使用的物理内存大小。
  6. available: 系统当前可用的物理内存大小。
  7. swap: 交换空间的使用情况。
    • total: 总的交换空间大小。
    • used: 已使用的交换空间大小。
    • free: 空闲的交换空间大小。

查看磁盘剩余量的命令

df

在这里插入图片描述

lsblk

在这里插入图片描述

  • NAME: 块设备的名称。
  • MAJ:MIN: 主设备号和次设备号。
  • RM: 可移动设备(1 表示可移动,0 表示不可移动)。
  • SIZE: 块设备的总大小。
  • RO: 只读属性(1 表示只读,0 表示可读写)。
  • TYPE: 块设备的类型。
  • MOUNTPOINT: 块设备被挂载到的目录。

fdisk -l

fdisk -l 是用于列出系统中所有的磁盘和分区信息的命令。

查看磁盘读写性能

dd

  1. 测试磁盘读取速度:
    - dd if=/dev/sda of=/dev/null bs=1M count=1000
  2. 测试磁盘写入速度:
    - dd if=/dev/zero of=/tmp/testfile bs=1M count=1000

iostat

iostat 可以提供更丰富的IO性能状态数据

[root@localhost ~]#iostat 1 -d /dev/sda
#只看 sda硬盘
Linux 3.10.0-693.el7.x86_64 (localhost.localdomain) 	2023年07月27日 	_x86_64_	(4 CPU)

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda             288.01     19561.04      7282.13   27750860   10331013

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               1.00         8.00         0.00          8          0

iotop

iotop 是一个用于监视磁盘 I/O 活动的命令行工具。它类似于 top 命令,但专注于显示磁盘 I/O 的信息,可以帮助你了解哪些进程正在读取或写入磁盘以及它们的 I/O 活动情况。

查看cpu的相关命令

mpstat

在这里插入图片描述
在这里插入图片描述

#mpstat 1 3
#1秒 一次 看3次

  • top 实时查看 ps 静态查看

查看网络的相关命令

iftop

iftop 是一个用于实时监视网络流量的命令行工具。它可以显示正在通过网络接口进出的数据流量,并按照流量的大小进行排序,以便用户可以快速了解网络上的数据传输情况。

运行 iftop 后,你将看到一个类似于 top 命令的实时网络流量监视界面。在界面中,你可以看到每个网络连接的源和目标 IP 地址、传输的数据大小、流量的方向、流量的速率等。

iftop -t 5 表示每 5 秒刷新一次。

计划任务

crontab周期

[root@localhost opt]#cat /etc/crontab 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

#For details see man 4 crontabs

#Example of job definition:
#.---------------- minute (0 - 59)
#|  .------------- hour (0 - 23)
#|  |  .---------- day of month (1 - 31)
#|  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
#|  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
#|  |  |  |  |
#*  *  *  *  * user-name  command to be executed

crontab -e

#进入 crontab 编辑界面。会打开Vim编辑你的任务

          • 执行的任务
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值