Linux系统进程管理

系统进程管理

一、进程概述

1.1 什么是进程?进程管理需要做什么?
  • 进程是已启动的运行实例,进程有以下组成部分:

​ 已分配内存的地址空间

​ 进程ID

​ 程序的代码

​ 进程状态

  • 进程管理包括进程调度、中断处理、信号、进程优先级、进程切换、进程装填、进程内存等等

    进程的生命周期

    在这里插入图片描述

描述如下:

	父进程复制自己的地址空间 创建一个新的子进程结构。
	每个新进程分配一个唯一的进程ID(PID)

	所有进程都是第一个系统进程的后代
	centos5或6PID为1的进程是:init
	centos7PID为1的进程是systemd
	僵尸进程:不执行代码,占用内存地址空间
	如果父进程没能接收子进程退出信号,那么子进程变为僵尸进程
	kill命令是不能杀死僵尸进程的
	解决问题方法:杀死僵尸进程的父进程或者重启系统
线程:
	线程是进程中产生的一个执行单元,在同一个进程中与其他线程并行运行
	线程之间可以共享资源,比如内存、地址空间、打开文件等。
上下文切换:
	cpu运行进程的切换而导致运行代码的切换叫做上下文切换
	进程运行的代码叫上下文
中断处理:
	中断是优先级最高的任务之一。
	大量中断会导致性能下降
	
	注意:在Linux当中有两种类型的中断。
	硬中断:是由硬件产生的,需要快速响应(磁盘IO中断、键盘中断、鼠标中断)
	软中断:用来处理可以推迟的任务(TCP/IP、SCSI协议等操作)
1.2 进程的属性
进程ID(PID):是唯一的数值
父进程的ID(PPID)
启动线程的用户ID(UID)和所归属的组(GID)
进程状态:状态分为运行R、休眠S、僵尸Z
进程执行的优先级
进程所连接的终端名
进程资源占用:比如占用资源大小(内存、CPU占用量)

二、管理进程

2.1 使用ps查看进程工具
ps查看进程工具
常用的参数
-a:显示跟当前终端关联的所有进程
-u:基于用户格式显示
-x:显示所有进程,不以终端机区分
[root@localhost ~]# ps -aux | more
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

USER:正在运行的用户
PID:进程的ID
%CPU:进程占用的CPU百分比
%MEM 占用内存的百分比;
VSZ:进程占用的虚拟内存大小(单位:KB)
RSS:进程占用的物理内存大小(单位:KB)
STAT:该程序目前的状态,Linux 进程有 5 种基本状态:
    R :该程序目前正在运行
    S :该程序目前正在睡眠当中
    T :该程序目前是停止状态
    Z :该程序应该已经终止,但是其父程序却没有正常的终止它;
    D 不可中断的睡眠状态,通常存在于 I/O 情况下;
    5 个基本状态后,还可以加一些字母,比如:Ss、R+,如下图:
        它们含意如下::
            <: 表示进程运行在高优先级上
            N: 表示进程运行在低优先级上
            L: 表示进程有页面锁定在内存中
            s: 表示进程是控制进程
            l: 表示进程是多线程的
            +: 表示当前进程运行在前台
START:该进程被触发启动的时间;
TIME :该进程实际使用 CPU 运行的时间。
COMMAND:该程序的实际指令
#在另一个终端查看a文件
[yang@localhost ~]$ vim a.txt

[root@localhost ~]# ps -aux | grep "a.txt"
yang       9738  0.0  0.5 151524  5028 pts/2    S+   04:35   0:00 vim a.txt
root       9740  0.0  0.1 112724  1000 pts/1    R+   04:35   0:00 grep --color=auto a.txt
2.2 ps -ef 显示所有完整格式进程
[root@localhost ~]# ps -ef  #-e显示所有进程  -f显示完整格式输出
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 04:07 ?        00:00:01 /usr/lib/systemd/systemd --
root          2      0  0 04:07 ?        00:00:00 [kthreadd]
root          3      2  0 04:07 ?        00:00:00 [ksoftirqd/0]
root          5      2  0 04:07 ?        00:00:00 [kworker/0:0H]

UID: 启动这些进程的用户
PID: 进程的 ID
PPID: 父进程的进程号
C: 进程生命周期中的 CPU 利用率
STIME: 进程启动时的系统时间
TTY: 表明进程在哪个终端设备上运行。如果显示?表示与终端无关,这种进程一般是内核态进程。另外,
tty1-tty6 是本机上面的登入者程序,若为 pts/0 等,则表示运行在虚拟终端上的进程。
TIME: 运行进程一共累计占用的 CPU 时间
CMD: 启动的程序名称
2.3 free 查看物理内存
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            972         601         155          20         215         152
Swap:          1023          33         990

第一行:
	total是总内存量
	used是已经使用的内存量
	free是空闲的内存
	shared是多个进程共享的内存总数
	buffers是缓冲内存数
	cached是缓存内存数。默认是KB
2.4 uptime查看系统负载
[root@localhost ~]# uptime
 #02:17:24 up  9:15,  4 users,  load average: 0.00, 0.01, 0.05
 #02:17:24 : 当前时间
 #up  9:15 : 系统运行时间,说明系统运行9个小时多
 #4 users  : 当前登录用户数
 #load average: 0.00, 0.01, 0.05     系统负载。即任务队列的平均长度。三个数值分别为
2.5 top动态管理进程
[root@localhost ~]# top
top - 02:24:53 up  9:23,  4 users,  load average: 0.00, 0.01, 0.05
Tasks: 211 total,   2 running, 209 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  4.0 sy,  0.0 ni, 96.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

每行信息含义如下(进程和CPU的信息 [ 第二行和第三行 ] )

Tasks: 211 total进程总数
2 running正在运行的进程数
209 sleeping睡眠的进程数
0 stopped停止的进程数
0 zombie僵尸进程数
%Cpu(s): 0.0 us系统用户进程使用CPU百分比
4.0 sy内核中的进程占用CPU占比
0.0 ni用户进程空间内改变过优先级的进程占用CPU百分比
96.0 id空闲CPU百分比
0.0 waCPU等待I/O完成的时间总量
0.0% hi 硬中断消耗时间硬中断,占用的百分比
0.0 si 软中断消耗时间软中断,占用的CPU百分比。硬中断是由硬件设备产生,需要快速响应。软中端被用来处理可以推迟的任务(TCP协议、SCSI协议)
0.0 st(steal 偷)st:虚拟机偷取物理的时间。比如:物理机运行了KVM,XEM虚拟机,KVM虚拟机占用物理机的CPU时间

内存信息(第四五行)

# KiB Mem :   995892 total,   147780 free,   617020 used,   231092 buff/cache
# KiB Swap:  1048572 total,  1014312 free,    34260 used.   150780 avail Mem 
Mem : 995892 total物理内存总量
47780 free空闲内存总量
617020 used使用的物理内存总量
231092 buff/cache用作内核缓存的内存量
和free返回结果相同
Swap: 1048572 total交换区总量
1014312 free空闲交换区总量
34260 used使用的交换区总量
150780 avail Mem总的可利用内存是多少

第七行进程信息

#   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND 
# 17365 root      20   0  162012   2348   1600 R  4.2  0.2   0:00.13 top     
#     1 root      20   0  128272   4944   2980 S  0.0  0.5   0:03.06 systemd
PID进程id
USER进程所有者的用户名
PR优先级(由内核动态调整),用户不能修改
表示内核看到的进程优先级
如果在该字段看到 rt ,则表示任务正在实时调度优先级下运行
NI进程优先级。nice值。负值表示高优先级,正值表示低优先级,用户可以自己调整
VIRT虚拟内存,是进程正在使用的所有内存(ps中标为VSZ)
VIRT:虚拟内存
1.进程需要的虚拟内存大小,包括进程使用的库、代码、数据等
2.加入进程申请100m的内存,但实际只使用了10m,那么他会增长100m,而不是实际的使用量
RES是进程所使用的物理内存,实际使用内存(ps中标为RSS)
RES:常驻内存
1.进程当前使用的内存大小,但不包括swap out
2.包含其他进程的共享
3.如果使用100m的内存,实际使用10m,只增长10m,与VIRT相反
4.关于库占用内存的情况,它只统计加载的库文件所占内存大小
SHR共享内存大小,单位kb
SHR:共享内存
1.除了自身进程共享内存,也包括可能与其他进程的共享内存
2.可用的共享内存量,通常不是所有内存都驻留
3.计算某个进程所占的物理内存大小公式:RES — SHR
S进程状态
D=不可中断的睡眠状态
R=运行中国或可运行
S=睡眠中
T=已停止
Z=僵尸进程
%CPU上次更新到现在的CPU时间占用百分比
%MEM进程使用的物理内存百分比
TIME+进程使用的CPU时间总计,单位1/100秒
COMMAND命令名/命令行
top快捷键
availble:可使用空间,评估有多少内存可用于启动新应用程序。
available 字段考虑了页缓存,而不是所有可回收的内存。
正因为这个原因所以通常 free+buff/cache 的数值要比 available 的数值大。
第三行为 swap 虚拟内存。
在上面信息中我们可以看到,其实系统上并没有运行什么服务。但是有 299 的 cache,这是因为在实验过程中
进行过多次读写执行等操作。这些文件会被系统暂时缓存下来,

默认三秒刷新一次,按s修改刷新时间

按空格:立即刷新

q 退出

P:按CPU排序

M:按内存排序

T:按时间排序

-p:进程IP,查看某个进程状态

-u/U:指定显示的用户

数字键1:显示每个内核的CPU使用率

h:帮助

使用lscpu命令可以查看CPU系统中CPU详细信息,并且socket字段表示物理CPU数量
2.6 fuser 根据文件或端口号找到相应进程
选项
	-k:默认为结束进程,也可以执行发送信号(可用信号与kill命令不同)
	-i:在结束进程前会交互式确认
	-u:在进程后显示进程所属用户名
	-c:查看有哪些进程访问挂载点下文件
	在对文件或目录执行fuser命令后会输出相应进程号,如果在进程号后出现c表示执行今晨给用户当前所在位置查询目录中。
	使用 f 表示文件,但通常文件默认不显示
	使用 r 表示root目录
	使用 e 表示正在运行的可执行文件

fuser 22/tcp
#查看tcp协议端口有哪些进程
2.7 lsof 命令
losf命令用于查看进程打开的文件,进程打开的端口(TCP、UDP)
选项:
	-l条件:列出符合条件的进程,IPV4或IPV6.(4,6,协议、端口、@ip)
	p<进程号>:列出指定进程号所打开的文件
	设备文件名或目录:查看系统中有关设备的进程信息

#列出进程所打开的文件
lsoft -p PID
2.8 ss命令
用于查看套接字(socket)
选项:
	-a:显示监听和建立连接的套接字
	-t:输出TCP套接字
	-u:显示UDP套接字
	-n:以端口号显示(默认显示服务器名称)
	-p:显示使用套接字的进程
	注意:fd 文件描述符 内核用于管理已被打开的文件创建的索引 用来执行被打开的文件

三、前后台进程切换

3.1 linux后台进程与前台进程的区别

前台进程:是在终端中运行命令,命令执行过程中持续占用前台

依赖终端:那么该终端就为进程的控制终端,一旦这个终端关闭,这个进程也随之消失

后台进程:进程进入后台执行,通常不会影响当前中后续命令执行,如tar -cf等

后台运行并脱离终端:其中由一类进程也叫守护进程,是运行在后台的一种特殊进程,不受终端控制,也不需要终端的交互。Linux的大多数服务器就是用守护进程进程实现的,比如web服务器的httpd等

3.2 进程的前台与后台的命令执行

跟系统任务相关的几个命令:

命令 &将命令放入后台执行
nohup 命令将命令设置为脱离终端
ctrl+z将一个正在前台执行的命令放到后台,并且暂停
jobs查看当前有多少在后台运行的进程
fg 编号在后台中的命令调至前台继续运行
bg 编号将一个后台暂停的命令,变成继续执行
3.3 kill 关闭进程

关闭进程三个命令:

kill、killall、pkill

kill 关闭进程:kill 进程号 关闭单个进程

killall和pkill命令用于杀死指定名字的进程

通过信号的方式来控制进程的
kill -l #列出所有支持的信号
信号编号信号名
1)SIGHUP重新加载配置
2)SIGINT键盘中断
3)SIGQUIT退出
9)SIGKILL强制终止
15)SIGTERM终止(正常结束)缺省信号
18)SIGCONT继续
19)SIGSTOP停止
20)SIGTSTP暂停 ctrl+z
3.3.1 kill命令
[root@localhost ~]# ps -aux | grep "sshd"
root      15386  0.3  0.5 160848  5552 ?        Ss   00:08   0:00 sshd: xxhf [priv]
xxhf      15400  0.0  0.2 160848  2380 ?        S    00:08   0:00 sshd: xxhf@pts/4
root      15447  0.0  0.0 112724   984 pts/2    R+   00:08   0:00 grep --color=auto sshd
[root@localhost ~]# kill -2 15386
[root@localhost ~]# ps -aux | grep "sshd"

3.3.2 killall命令

killall [子选项] [信号] 进程名

选项:
-i:交互式,询问是否要杀死某个进程
#父进程结束,子进程不可能结束,子进程的父进程会变成之前父进程的父进程
[root@localhost ~]# killall -i sshd  交互式杀死sshd进程
3.3.3 pkill命令
跟killall相似,也是按照进程名来杀死进程
killall [子选项] [信号]  进程名
选项:
-t:端口号:按照终端号踢出用户

四、进程的优先级管理

优先级取值范围为(-20,19)值越小优先级越高,默认优先级是0

#nice -n 指定程序的运行优先级
[root@localhost yang]# nice -n -5 vim /etc/fstab 
[root@localhost ~]# ps aux | grep vim
[root@localhost ~]# top -p 16471

#renice 改变程序的运行优先级
[root@localhost yang]# renice +5 3103
3103 (进程 ID) 旧优先级为 0,新优先级为 5

五、screen概念

Screen有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telent、SSH连接窗口那样

#新建一个test会话
screen -S test

#列出所有当前会话
screen -ls

#回到test会话
screen -r test

### 五、screen概念

Screen有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telent、SSH连接窗口那样

```shell
#新建一个test会话
screen -S test

#列出所有当前会话
screen -ls

#回到test会话
screen -r test

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/647623.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从感知机到神经网络

感知机 一、感知机是什么二、用感知机搭建简单逻辑电路2.1 与门2.2 与非门2.3 或门 三、感知机的局限性3.1 异或门3.2 线性和非线性 四、多层感知机4.1 已有门电路的组合4.2 Python异或门的实现 五、感知机模型5.1 感知机模型5.2 感知机损失函数5.3 感知机学习算法 六、感知机原…

贪心-AcWing 1522. 排成最小的数字-XMUOJ石板序列

题目 思路 getline() 是 C 标准库中的一个函数&#xff0c;用于从输入流中读取一行文本&#xff0c;并将其存储为字符串。它可以从标准输入、文件流、字符串流等不同类型的输入流中读取数据。C中istringstream、ostringstream、stringstream详细介绍和使用_c istringstream-CS…

【网络技术】【Kali Linux】Wireshark嗅探(十五)SSDP(简单服务发现协议)报文捕获及分析

往期 Kali Linux 上的 Wireshark 嗅探实验见博客&#xff1a; 【网络技术】【Kali Linux】Wireshark嗅探&#xff08;一&#xff09;ping 和 ICMP 【网络技术】【Kali Linux】Wireshark嗅探&#xff08;二&#xff09;TCP 协议 【网络技术】【Kali Linux】Wireshark嗅探&…

SpringMVC:创建一个简单的SpringMVC框架S

目录 一、框架介绍 两个重要的xml文件 SpringMVC执行流程 二、Vscode搭建SpringMVC框架 1、maven创建webapp原型项目 2、pom.xml下添加springmvc的相关依赖 3、在web.xml配置 4、springmvc.xml的配置 5、编写Controller控制器类 6、 编写JSP界面 7、项目结构图 一…

C++开发面试常问总结

一些面试总结 TCP粘包了解吗&#xff1f;解决办法&#xff1f;讲一下乐观锁悲观锁git中 git pull和git fetch的区别1.虚函数实现机制&#xff1a;2.进程和线程的区别&#xff1a;3.TCP三次握手、四次挥手&#xff1a;4.HTTP状态码&#xff0c;报头&#xff1a;5.智能指针&#…

Jeecg | 完成配置后,如何启动整个项目?

前端启动步骤&#xff1a; 1. 以管理员身份打开控制台&#xff0c;切换到前端项目目录。 2. 输入 pnpm install 3. 输入 pnpm dev 4. 等待前端成功运行。 可以看到此时前端已经成功启动。 后端启动步骤&#xff1a; 1. 启动 mysql 服务器。 管理员身份打开控制台&#…

录屏技巧:win11怎么录屏?这5个电脑录屏方法快速了解下

无论您是想进行工作演示还是游戏直播&#xff0c;电脑录屏都有很大帮助。录制 Win 11 屏幕在很多方面都非常有效&#xff0c;因为它能让事情变得更简单。但 Win11怎么录屏呢&#xff1f;如果您仍有困惑&#xff0c;请查看本篇文章中列出的5个方法。在本文中&#xff0c;我们列出…

解决 Failed to parse remote port from server output【Remote-SSH】【VSCode】

描述 一早起来&#xff0c;发现remote-ssh无法进入服务器容器&#xff0c;本地使用git bash进行ssh可正常连接服务器&#xff0c;基本确定是vscode工具本身的问题。重装本地用户的.vscode相关目录清空&#xff0c;vscode重装均无果&#xff0c;不建议尝试。弹窗信息为Could no…

机器重启oracle数据库自动启动异常

业务连接报ora-01033&#xff1a; 检查服务器&#xff0c;发现有重启记录&#xff0c;oracle进程存在&#xff0c;数据库状态处于mount状态&#xff0c;检查日志&#xff0c;发现在数据库启动时没有正常open&#xff1a; 连入数据库&#xff1a;Select * from v$backup 发现数…

visual studio code生成代码模板

编写需要生成代码片段的代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"wid…

Vue3图片浏览组件v-viewer,支持旋转、缩放、翻转等操作

文章目录 1. v-viewer组件简介2. 在vue项目使用2.1 指令形式调用2.2 组件形式调用2.3 api形式调用 Viewer的配置项 & 方法bug 1. v-viewer组件简介 一款基于 viewer.js 封装的Vue版插件&#xff0c;可用于图像查看&#xff0c;以及图片的旋转、缩放等功能预览 官网&#…

CVE-2020-7982 OpenWrt 远程命令执行漏洞学习(更新中)

OpenWrt是一款应用于嵌入式设备如路由器等的Linux操作系统。类似于kali等linux系统中的apt-get等&#xff0c;该系统中下载应用使用的是opgk工具&#xff0c;其通过非加密的HTTP连接来下载应用。但是其下载的应用使用了SHA256sum哈希值来进行检验&#xff0c;所以将下载到的数据…

python探索转义字符的奥秘

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、转义字符的定义与功能 案例解析&#xff1a;换行符与双引号 二、转义字符的应用场景 …

【笔记】Pytorch安装配置

参考视频 安装前建议预留至少10个G的空间&#xff0c;会省下很多麻烦 查看安装是否成功&#xff0c;可以在Anaconda Prompt里输入conda list查看conda环境是否配置了pytorch/torchvision 1.安装anaconda 2.安装 CUDA CUDA在官网直接安装即可&#xff0c;需要先查看自己电脑…

HQL面试题练习 —— 互相关注

目录 1 题目2 建表语句3 题解 1 题目 现有用户关注者列表记录表 t_user_follower&#xff0c;有两个字段&#xff0c;用户ID&#xff08;user_id&#xff09;&#xff0c;关注者列表&#xff08;follower_ids)&#xff0c;关注者列表中是关注用户的用户ID&#xff0c;数据样例如…

python冰雹序列的探索与编程实现

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、冰雹序列的奥秘 二、编程实现冰雹序列 三、测试与验证 四、总结与展望 一、冰雹序列的…

【NOIP2013普及组复赛】题4:车站分级

题4&#xff1a;车站分级 【题目描述】 一条单向的铁路线上&#xff0c;依次有编号为 1 , 2 , … , n 1,2,…,n 1,2,…,n 的 n n n 个火车站。每个火车站都有一个级别&#xff0c;最低为 1 1 1 级。现有若干趟车次在这条线路上行驶&#xff0c;每一趟都满足如下要求&#…

力扣刷题---LCS 02. 完成一半题目【简单】

题目描述 有 N 位扣友参加了微软与力扣举办了「以扣会友」线下活动。主办方提供了 2*N 道题目&#xff0c;整型数组 questions 中每个数字对应了每道题目所涉及的知识点类型。 若每位扣友选择不同的一题&#xff0c;请返回被选的 N 道题目至少包含多少种知识点类型。 示例 1&…

基于yolov5和desnet的猫咪识别模型

前言 前段时间给学校的猫咪小程序搭建了识猫模型&#xff0c;可以通过猫咪的照片辨别出是那只猫猫&#xff0c;这里分享下具体的方案&#xff0c;先看效果图&#xff1a; 源代码在文末 模型训练 在训练服务器&#xff08;或你的个人PC&#xff09;上拉取本仓库代码。 图片数据…

方正畅享全媒体新闻采编系统 binary.do SQL注入漏洞复现

0x01 产品简介 方正畅享全媒体新闻生产系统是以内容资产为核心的智能化融合媒体业务平台,融合了报、网、端、微、自媒体分发平台等全渠道内容。该平台由协调指挥调度、数据资源聚合、融合生产、全渠道发布、智能传播分析、融合考核等多个平台组成,贯穿新闻生产策、采、编、发…