程序进程命令

本文详细阐述了进程的概念、性能指标、与线程的区别、状态管理、进程间的通信方式、进程分类、常用的进程管理命令、内存使用问题、进程优先级调整、以及病毒解决方案。重点介绍了top、iostat、crontab等实用工具的使用。
摘要由CSDN通过智能技术生成

目录

程序

进程

进程的五大性能

进程具有的特征

进程与线程的区别

例题1

僵尸进程

进程使用内存的问题

进程状态

进程的基本状态

进程更多的状态

进程的通讯

进程分类

进程管理相关命令

系统中可识别的信号 kill

killall 命令

ps 命令

进程的优先级

相关命令

查看进程信息 prtstat

top 命令

第一部分

第二部分

top 命令选项

top 命令界面的交互选项

pidof 命令

pgrep 命令

pstree 命令进程树

例:

lsof 命令

误删文件如何找回

vmstat 监控系统资源 虚拟资源

内存查看

iostat 命令

iotop 命令

uptime 命令

mpstat 命令

dstat 命令

webadin 命令:图形界面

进程管理

手动启动

进程的前/后台调用

中止程序的运行

计划任务管理

at 一次性计划任务

crontab 任务配置的格式

编辑计划任务

删除计划任务

查看计划任务

病毒的解决思路


程序

—— 没有运行的代码就是程序


进程

进程是程序的副本,是被载入内存的一个指令集合,运行起来的代码就是进程

进程的五大性能

—— 内存 :free 、top (查看内存的命令)

—— cpu :top 、ps 和 aux 为单个进程

—— 磁盘大小:大小为 lsblk 、剩余为 df

—— 读写性能:读写为 iostat (dd 为写入) 、vmstat 输出

—— 网络:dmstat 、iftop 需要安装依赖包(yum install epel-release.noarch -y

进程具有的特征

动态性、并发性、独立性、结构性

进程与线程的区别

—— 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位

—— 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线

—— 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见

—— 调度和切换:线程上下文切换比进程上下文切换要快得多

例题1

—— 如何确定一个程序是多线程还是单线程

grep -i threads /proc/进程的 PID /status

prtstat 进程 PID 号

僵尸进程

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

实验举例

—— 上一步将会导致虚拟机卡住,利用 Xshell 开启另一个窗口进行后续操作 ——

—— 此时切换回上一个窗口,显示结果 ——

进程使用内存的问题

内存泄漏 Memory Leak

—— 指程序中用 malloc 或 new 申请了一块内存,但是没有用 free 或 delete 将内存释放,导致这块内存一直处于占用状态

内存溢出 Memory Overflow

—— 指数据溢出,例:程序申请了 10M 的空间,但是在这个空间写入 10M 以上字节的数据

内存不足 OOM

—— OOM 即 Out Of Memory ,内存用完了

进程状态

进程的基本状态

—— 创建状态

进程在创建时需要申请一个空白 PCB(process control block 进程控制块),向其中填写控制和管理进程的信息,完成资源分配,如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态

—— 就绪状态

进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行

—— 执行状态

进程处于就绪状态被调度后,进程进入执行状态

—— 阻塞状态

正在执行的进程由于某些事件( I/O 请求,申请缓存区失败)而暂时无法运行,进程受到阻塞,在满足请求时进入就绪状态等待系统调用

—— 终止状态

进程结束,或出现错误,或被系统终止,进入终止状态,无法再执行

进程更多的状态

—— 运行态:running

—— 就绪态:ready

—— 睡眠态

可中断:interruptable

不可中断:uninterruptable

—— 停止态

stopped,暂停于内存,但不会被调度,除非手动启动

—— 僵死态

zombie,僵尸态,结束进程,父进程结束前,子进程不关闭,杀死父进程可以关闭僵死态 的子进程

进程的通讯

pipe :管道,单向传输

socket :套接字文件,双工通信

Memory-maped file :文件映射,将文件中的一段数据映射到物理内存,多个进程共享这片内存

shm shared memory :共享内存

signal :信号

Lock :对资源上锁,如果资源已被某进程锁住,则其它进程想修改甚至读取这些资源,都将被阻塞,直到锁被打开

semaphore :信号量,一种计数器

进程分类

操作系统分类

协助式多任务、抢占式多任务

进程类型

守护进程:daemon ,在系统引导过程中启动的进程和终端无关进程

前台进程:跟终端相关,通过终端启动的进程

按照进程资源使用的分类

CPU-Bound :CPU 密集型、非交互

IO-Bound :IO 密集型、交互


进程管理相关命令

系统中可识别的信号 kill

—— 可通过 kill -l 查看

—— 常用信号

代号名称解释
1SIGHUP该信号让进程立即关闭.然后重新读取配置文件之后重启
2SIGINT程序中止信号,用于中止前台进程。相当于输出 Ctrl+C 快捷键
3SIGQUIT退出
8SIGFPE在发生致命的算术运算错误时发出,不仅包括浮点运算错误,还包括溢出及除数为 0 等其他所有的算术运算错误
9SIGKILL用来立即结束程序的运行,本信号不能被阻塞、处理和忽略。般用于强制中止进程
14SIGALRM时钟定时信号,计算的是实际的时间或时钟时间,alarm 函数使用该信号
15SIGTERM正常结束进程的信号,kill 命令的默认信号。如果进程已经发生了问题,那么这 个信号是无法正常中止进程的,这时我们才会尝试 SIGKILL 信号,也就是信号 9
18SIGCONT该信号可以让暂停的进程恢复执行,本信号不能被阻断
19SIGSTOP该信号可以暂停前台进程,相当于输入 Ctrl+Z 快捷键,本信号不能被阻断

killall 命令

killall 选项 进程名

-i :交互式,询问是否要杀掉某个进程

-l :忽略进程名的大小写


ps 命令

—— ps -l :查看当前登录产生了哪些进程

—— ps -aux :静态显示当前主机所有的进程

a :显示所有终端上的进程

u :列出进程的所属用户

x :显示终端进程的信息

列表组成注释
USER进程属于哪个用户
PID进程号;程序的进程号是唯一的
%CPU进程占用 CPU 的百分比,占用的百分比越高,进程越耗费资源
%MEM进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源
VSZ该进程占用虚拟内存的大小,单位 KB
RSS该进程占用实际物理内存的大小,单位 KB
TTY从哪个终端运行的,不是从终端运行的都显示 ?
STAT进程的状态信息
START该进程的启动时间
TIME该进程占用 CPU 的运算时间,并不是系统时间
COMMAND该进程的启动命令

——STAT 的常见状态信息 ——

常见状态代号注释
D不可被唤醒的睡眠状态,通常用于 I/O 情况
R正在运行
S处于休眠状态,但是可以被唤醒
T停止状态或者调试状态
Z僵尸进程
<高优先级
N低优先级
L被锁入内存里
W内存交互状态(从 2.6 内核开始无效)
s包含子进程
l多线程
+位于后台

—— ps -elf :查看静态的进程统计信息

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

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

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

列表组成注释
F内核分配给进程的系统标记
S进程的状态
UID启动这些进程的用户
PID进程的进程 ID ,每个进程都有一个唯一的 PID
PPID父进程的进程号(如果该进程是由另—个进程启动的)
C进程生命周期中的CPU利用率
PRI进程的优先级(越大的数字代表越低的优先级)
NI谦让度值用来参与决定优先级
ADDR进程的内存地址
SZ假如进程被换出,所需交换空间的大致大小
WCHAN若该进程在睡眠,则显示睡眠中的系统函数名
STIME进程启动时的系统时间
TTY进程启动时的终端设备
TIME运行进程需要的累计 CPU 时间
CMD进程的启动命令

ps -elf|head :查看进程的优先级


进程的优先级

—— 在 Linux 系统中,表示进程优先级的有两个参数:Priority 和 Nice 其中,PRI 代表 Priority ,NI 代表 Nice ,这两个值都表示优先级,数值越小代表该进程越优先被 CPU 处理,不过,PRI 值是由内核动态调整的,用户不能直接修改,所以我们只能通过修改 NI 值来影响 PRI 值,间接地调整进程优先级,NI 值越小,进程的 PRI 就会降低,该进程就越优先被 CPU 处理;反之,NI 值越大,进程的 PRI 值就会増加,该进程就越靠后被 CPU 处理

—— 修改 NI 值的注意事项

  1. NI 范围是 -20 ~ 19

  1. 普通用户调整 NI 值的范围是 0 ~ 19,而且只能调整自己的进程

  1. 普通用户只能调高 NI 值,而不能降低;如原本 NI 值为 0 ,则只能调整为大于 0

  1. 只有 root 用户才能设定进程 NI 值为负值,而且可以调整任何用户的进程

进程优先级调整

—— 静态优先级:100 - 139

—— 进程默认启动时的 nice 值为 0 ,优先级为 120(-20 -- 19)

—— 只有根目录才能降低 nice 值(提高优先性)

相关命令

ps -elf|head :查看进程的优先级

nice -n -10 ping 127.0.0.1 :更改优先级为 10 ,ping 回环地址

renice -n -20 2118 :降低进程优先级


查看进程信息 prtstat

格式:prtstat 进程 PID 号


top 命令

—— 可以动态地持续监听进程地运行状态

第一部分

第一行:任务队列信息

说明
23:55:21系统当前时间
up 4:48系统已运行的时长
3 users当前登录的用户数(目前有三个用户登录)
load average: 0.00,0.01,0.05平均负载,即单位时间内系统处理的任务数,后面三个数值分别为 1 分钟、5 分钟、15 分钟前到现在的平均值

第二行:系统进程信息

说明
Tasks:187 total系统中的进程总数(目前有 187 个进程)
1 running正在运行的进程数(目前有 1 个正在运行的进程)
184 sleeping睡眠的进程数量(目前有 184 个睡眠的进程)
2 stopped中止的进程数(目前有 2 个中止的进程数)
0 zombie僵尸进程的个数

第三行:CPU 信息

%Cpu(s)占用 cpu 的百分比
0.0 us用户占用百分比
0.0 sy系统模式占用百分比
0.0 ni优先级调度占用百分比
100.0 id空闲 cpu 的占用百分比
0.0 wa等待输入/输出的进程进程占用百分比
0.0 hi硬件中断占用百分比
0.0 si软件中断占用百分比
0.0 st虚拟程序占用百分比

第四行:物理内存信息

KiB Mem内存占用(单位为 K)
3865304 total物理内存总量(目前为 3865304 K)
566680 free空闲内存量(目前为 566680 K)
894640 used已使用物理内存量(目前为 894640 K)
2403984 buff/cache物理内存和交互内存的缓冲区总和(2403984 K)

第五行:swap 信息

KiB Swapswap 分区(单位为 K)
4194300 total交换分区(虚拟内存)总大小(目前为 4194300 K)
4194300 free空闲交换分区的大小(目前为 4194300 K)
0 used已经使用的交换分区的内存大小(目前为 0 K)
2630196 avail Mem可以物理空间大小(目前为 2630196 K)
第二部分

列表组成注释
PID进程的进程 ID ,每个进程都有一个唯一的 PID
USER进程属于哪个用户
PR优先级,数值越小优先级越高
NI优先级,数值越小优先级越高
VIRT该进程使用的虚拟内存的大小,单位为 KB
RES该进程使用的物理内存的大小,单位为 KB
SHR共享内存大小,单位为 KB
S进程状态
%CPU该进程占用 CPU 的百分比
%MEM该进程占用内存的百分比
TIME+该进程共占用的 CPU 时间
COMMAND进程的命令名
top 命令选项
top作用
-d 秒数指定 top 命令每隔几秒更新
-b使用使用批处理模式输出,一般和 " -n " 选项合用,用于把 top 命令重定向到文件中
-n 次数指定 top 命令执行的次数
-p 进程PID仅查看指定 ID 的进程
-s是 top 命令在安全模式中运行,避免在交互模式中出现错误
-u 用户名只监听某个用户的进程

top 命令界面的交互选项

—— ?或 h :显示交互模式的帮助

—— c :按照 CPU 的使用率排序,默认就是此选项

—— M :按照内存的使用率排序

—— N :按照 PID 排序

—— T :按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序

—— k :按照 PID 给予某个进程一个信号,一般用于中止某个进程,信号 9 是强制中止的信号

—— r :按照 PID 给某个进程重设优先级(Nice)值

—— q :退出 top 命令


pidof 命令

已知程序名不知道 PID 号

格式:pidof 进程名

查看目标进程的 PID 号


pgrep 命令

查看指定的进程

格式:pgrep 选项 进程名

选项作用
-U指定用户
-l显示进程名
-a显示完整格式的进程名
-p pid显示指定进程的子进程

pstree 命令进程树

以树形结构列出进程信息

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

例:

—— pstree 1

查看进程号为 1 的进程

—— pstree lisi

查看用户 lisi 的进程

—— pstree -pH 1780

高亮显示进程号为 1780 的进程


lsof 命令

根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件

格式:lsof 选项

选项作用
-c 字符串只列出以字符串开头的进程打开的文件
+d 目录名列出某个目录中所有被进程调用的文件
-u 用户名只列出某个用户的进程打开的文件
-p pid列出某个 PID 进程打开的文件

误删文件如何找回

前提条件:有人在使用误删的文件

losf |grep delete 找回删除文件 echo “ ” > bigfile


vmstat 监控系统资源 虚拟资源

动态了解当前系统资源的使用情况

格式:vmstat -a 刷新时间 刷新次数


内存查看

free

pmap 进程 PID 号


iostat 命令

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

iostat作用
-c只显示 CPU 行
-d 磁盘绝对位置显示磁盘使用状态
-k以千字节为为单位显示输出
-t在输出中包括时间戳
-x在输出中包括扩展的磁盘指标

iotop 命令

是一个用来监视磁盘 I/O 使用状况的 top 类工具,它可以显示磁盘 I/O 使用情况最高的进程和线程,以及它们的 I/O 速率,对于 HEL/CentOS 的系统,可以使用 YUM Command 来安装 iotop

—— 安装包命令:sudo yum install iotop


uptime 命令

系统运行了多久时间


mpstat 命令

显示 CPU 相关统计


dstat 命令

系统资源统计

yum install dstat -y :依赖包


webadin 命令:图形界面


进程管理

手动启动

—— 前台启动:通过终端启动,且启动后一直占据终端

—— 后台启动:可通过终端启动,但启动后即转入后台运行(释放终端),在命令行尾加入 & 符号

进程的前/后台调用

—— Ctrl Z 组合键:将当前进程挂起,即调入后台并停止执行

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

jobs -l :显示 PID 号

—— fg 命令:将后台进程恢复到前台运行,可指定任务序列号

—— bg 工作号:继续任务

中止程序的运行

—— Ctrl C 组合键:中断正在执行的命令


计划任务管理

at 一次性计划任务

at 队列存放在 /var/spool/at 目录中,服务脚本名称为 /etc/init.d/atd

格式:at HH:MM yyyy-mm-dd —— 例:at 10:02 2023-11-7

atq —— 查看未执行的一次性计划任务

atrm 数字编码 —— 删除第几条任务

crontab 任务配置的格式

*****user-name command to be executed
代表意义一小时当中的第几分钟(minute)一天当中的第几小时(hour)一个月当中的第几天(day)一年当中的第几个月(month)一周当中的星期几(week)命令
数字范围0~590~231~311~120~7需要执行的命令

时间表示的特殊符号含义
*代表任何时间(每分钟或者每小时都执行一次)
代表不连续的时间
-代表连续的时间
/代表每个多久执行一次

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

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

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

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

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

编辑计划任务

crontab -e [-u 用户名]

删除计划任务

crontab -r [-u 用户名]

查看计划任务

crontab -l [-u 用户名]


病毒的解决思路

—— 中病毒很明显的表现形式:内存使用量过高

—— 通过ps aux 找到内存使用过高的应用程序

然后进到 prog 的 pid 文件下通过 xe 的软连接来找到他的位置并将他删掉

然后在同目录下先建一个同名文件,并加上一个不可删除的权限,可以暂时缓解病毒的问题,再顽强就解决不了了,只能重装系统

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值