11_进程管理和SELinux

什么是进程

在系统中触发任何一个事件,系统都会把它定义成一个进程,并且给这个进程一个ID,也就是PID。同时也会根据触发这个进程的用户与相关属性,给这个PID一个相应的权限设置。

进程与程序

如何触发事件呢,执行程序或者命令,都会触发事件从而获得PID。

  • 父进程和子进程:某些进程会触发衍生的进程,也就是子进程和父进程。我们可以用bash创建一个新的bash,可以看到它的PPID就是上一个Bash。PPID也就是Parent PID,就是父进程。

    [root@node4 ~]# bash
    [root@node4 ~]# ps -l
    F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    4 S     0   1329   1327  0  80   0 - 28919 do_wai pts/0    00:00:00 bash
    4 S     0   1721   1329  0  80   0 - 28919 do_wai pts/0    00:00:00 bash
    0 R     0   1740   1721  0  80   0 - 38331 -      pts/0    00:00:00 ps
    
  • 系统的常驻进程:大多数命令的进程,在执行完毕后就会消失了。有很多系统进程一直在后台持续运行,这种进程称作服务daemon。

Linux的多人多任务环境

由于系统会为每个登录的人赋予不同的PID,并根据登录用户给与不同的权限,这就使得Linux很适合多人多任务环境的工作。Linux的CPU调度机制非常优秀,可以最大限度的压榨CPU性能,让每个用户觉得自己是在独享这台机器。

Linux默认提供了7个基本终端界面,包括6个命令行界面和一个图形界面。Linux系统很少会死机,因为它可以在任何时候将某个卡主的进程杀掉,然后重新运行该进程。这也是Linux系统比较稳定的其中一个原因。

任务管理

  • 后台执行命令&

    如果在同一个bash中想要并行执行多个任务,就要使用&命令,例如

    tar -zpcvf /tmp/etc/tar.gz /etc > /tmp/log.txt 2>&1 &
    

    我们将执行过程中的log输出到txt中,这样就不会让屏幕花花绿绿的影响操作了

  • 暂停任务【ctrl+z】例如我们在用vim编辑一个文件时,希望先退出来看下某个文件的路径,这是可以在vim的一般模式使用ctrl+z让任务暂停执行

    [root@node4 ~]# vim hello.txt [1]+  已停止               vim hello.txt
    
  • 查看后台任务:jobs 通过jobs命令可以看到后台的任务状态

    [root@node4 ~]# jobs
    [1]+  已停止               vim hello.txt# 其他参数
    -l: 列出PID
    -r:仅列出正在执行的任务
    -s:仅列出已暂停的任务 
  • 将后台任务拿到前台执行:fg

    fg %任务号码[root@node4 ~]# fg %1
    vim hello.txt
    ---将会继续执行
    
  • 让后台任务从暂停变成执行:bg

  • 杀任务:kill,这是一个比较常用的命令,使用-l参数可以看到kill可以使用的所有信号号码

    [root@node4 ~]# kill -l1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1。。。。。。
    

    kill的语法是

    kill -信号号码 %任务号码
    比较常用的信号有
    -1:相当于reload
    -2:相当于键盘输入ctrl+c
    -9:强制删除,一般强制杀进程就用它
    -15:以正常的进程 方式终止任务
    

    kill命令后面默认跟的是PID,本例中我们来关闭上面的vim

    [root@node4 ~]# jobs
    [1]+  已停止               vim hello.txt
    [root@node4 ~]# kill -9 %1[1]+  已停止               vim hello.txt
    [root@node4 ~]# jobs
    [1]+  已杀死               vim hello.txt
    [root@node4 ~]# jobs
    

    此时用-9强制关闭vim,就会产生缓存文件,下次打开时会问你要不要恢复。

  • 脱机执行。如果希望进程在断开连接后继续执行,可以使用nohup命令

进程管理

查看进程ps

查看进程可以使用ps命令

# 查看当前bash的进程
[root@node4 ~]# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0   1329   1327  0  80   0 - 28970 do_wai pts/0    00:00:00 bash
0 R     0   4796   1329  0  80   0 - 38331 -      pts/0    00:00:00 ps

我们来介绍下每一列的含义

  1. F:表示进程的权限,4表示权限是root
  2. S:进程状态,R running S sleep T stop Z zombie
  3. UIP PID PPID:用户ID、进程ID、父进程ID
  4. C:CPU使用率
  5. PRI/NI:CPU执行的优先级
  6. ADDR 表示在内存中的位置,正在运行一般是- ;SZ代表占用多少内存; WCHAN 表示运行状态,运行中是-
  7. TTY:登录者的终端位置
  8. TIME:使用CPU的时间
  9. CMD:触发此进程的命令
# 查看所有进程
[root@node4 ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.3 133572  3852 ?        Ss   20:36   0:02 /usr/lib/systemd/systemd --switched-root -
root          2  0.0  0.0      0     0 ?        S    20:36   0:00 [kthreadd]
root          4  0.0  0.0      0     0 ?        S<   20:36   0:00 [kworker/0:0H]
......

aux命令可以查看所有进程,其中一些含义是

  1. MEM:占用内存的物理百分比
  2. VSZ:占用的虚拟内存
  3. RSS:占用的固定内存量
  4. TTY:该进程在哪个终端上进行,与终端无关则显示?。tty1-6是本机上的登录进程,吐过是pts/0,说明是网络连接进入主机的进程
  5. STAT:进程状态
  6. START:进程触发时间
  7. TIME:实际CPU运行时间
  8. COMMAND:实际命令是什么

动态查看进程top

# 查看进程,2s更新一次
[root@node4 ~]# top -d 2
top - 21:05:13 up 29 min,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:  90 total,   1 running,  89 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   995460 total,   192824 free,   491400 used,   311236 buff/cache
KiB Swap:  1999868 total,  1999868 free,        0 used.   358428 avail Mem PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                1031 mysql     20   0 1315648 392188  15168 S  0.5 39.4   0:15.26 mysqld                                 1 root      20   0  125376   3852   2584 S  0.0  0.4   0:01.29 systemd                                2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd   

每一行的含义分别是:

  1. 目前时间、up系统已运行时间、用户数、表示1/5/15分钟的平均任务负载数量,在1以下是正常的,越小代表系统越空闲
  2. tasks:目前总进程数量和各个状态,这里要注意的是僵尸进程数量
  3. %CPUs:cpu的整体负载。这里一般关注wa,它代表IO的wait。一般系统变慢都是因为IO
  4. Mem、Swap物理内存和虚拟内存的使用情况。如果虚拟内容使用量很多,那就说明物理内存不够用了

下面是各个进程的具体情况,默认是按照CPU使用率排序的。如果希望按照进程ID排序,可以按下M,恢复可以按P。按Q退出。

查看进程树pstree

pstree可以查看关联的进程

pstree [-A|U] [-up]
-A 各进程之间的连接以ASCII字符连接
-U 以UNICODE字符连接
-p 列出每个PID
-u 列出用户
[root@node4 ~]# pstree -Aup
systemd(1)-+-NetworkManager(536)-+-{NetworkManager}(586)|                     `-{NetworkManager}(588)|-VGAuthService(486)|-agetty(549)|-anacron(2525)|-atd(543)|-auditd(424)---{auditd}(425)|-crond(540)|-dbus-daemon(491,dbus)|-mysqld_safe(818)---mysqld(1031,mysql)-+-{mysqld}(1214)

可以看到systemd是所有进程的父进程,因为它是Linux内核主动调用的第一个进程,所以它PID是1

进程的管理

通过给进程发送一个信号,来进行进程管理。

  • kill -signal PID
  • kill -signal 命令名称

进程的执行优先级

通过PRI和Nice的值,可以指定进程的优先级

  • nice的值在-20~19之间
  • Root可以调整所有用户的nice值,调整范围在-20~19
  • 一般用户可以调整自己的nice值,调整范围在0~19
  • 一般用户只能将nice值调高

调整nice值有2个方式:

  1. 一开始执行进程时就用nice命令给予一个特定的nice值

    nice [-n 数字] command
    # 用nice指定5的nice值运行vim
    [root@node4 ~]# nice -n -5 vim &
    [1] 3178
    [root@node4 ~]# ps -l
    F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    4 S     0   1389   1385  0  80   0 - 28919 do_wai pts/0    00:00:00 bash
    4 T     0   3178   1389  0  75  -5 - 36808 do_sig pts/0    00:00:00 vim
    0 R     0   3182   1389  0  80   0 - 38331 -      pts/0    00:00:00 ps[1]+  已停止               nice -n -5 vim
    [root@node4 ~]# kill -9 %1[1]+  已停止               nice -n -5 vim
    
  2. 调整某个已存在的PID的nice值,使用renice命令

    renice [number] PID
    # 调整bash的优先级为5
    [root@node4 ~]# ps -l
    F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    4 S     0   1389   1385  0  80   0 - 28950 do_wai pts/0    00:00:00 bash
    0 R     0   3292   1389  0  80   0 - 38331 -      pts/0    00:00:00 ps
    [1]+  已杀死               nice -n -5 vim
    [root@node4 ~]# renice -5 1389
    1389 (进程 ID) 旧优先级为 0,新优先级为 -5
    [root@node4 ~]# ps -l
    F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    4 S     0   1389   1385  0  75  -5 - 28970 do_wai pts/0    00:00:00 bash
    0 R     0   3347   1389  0  75  -5 - 38331 -      pts/0    00:00:00 ps
    

查看系统的其他信息

  • free:查看系统内存

    free -[b/k/m/g/h] -t -s N
    -b:默认内存单位是KB,可以手动指定单位
    -t:输出最终结果的sum-s:刷新显示结果[root@node4 ~]# free -mttotal        used        free      shared  buff/cache   available
    Mem:            972         487         179           7         305         342
    Swap:          1952           0        1952
    Total:         2925         487        2132
    
  • uname:查看系统和内核的相关信息

    uname [-asrmpi]
    -a:显示所有信息
    -s:内核名称
    -r:内核版本
    -m:系统硬件架构
    -p:cpu类型
    -i:硬件平台
    [root@node4 ~]# uname -a
    Linux node4 3.10.0-1160.108.1.el7.x86_64 #1 SMP Thu Jan 25 16:17:31 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
    
  • uptime:查看系统运行时间和任务负载

    [root@node4 ~]# uptime10:36:47 up 49 min,  1 user,  load average: 0.03, 0.04, 0.05
    
  • netstat:追踪网络或socket文件

    netstat -[atunlp]
    -a:列出所有连接、监听、socket信息
    -t、-u:列出tcp或者udp网络封包信息
    -n:以端口号来显示
    -l:列出目前正在网络监听的服务
    -p:列出该网络服务的PID# 列出目前系统上监听的网络连接和PID
    [root@node4 ~]# netstat -tulnp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      791/sshd            
    tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      1032/mysqld         
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1301/nginx: master  
    tcp6       0      0 :::22                   :::*                    LISTEN      791/sshd
    
  • dmesg:分析内核产生的信息

  • vmstat:检测系统资源变化

    # 统计目前cpu状态,每秒一次,共3次
    [root@node4 ~]# vmstat 1 3
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st2  0      0 168304   2072 322588    0    0    42    26  143  348  0  0 99  0  00  0      0 168304   2072 322620    0    0     0     0  143  318  0  0 100  0  01  0      0 168304   2072 322620    0    0     0     0  141  306  0  0 100  0  0

其他与进程相关的命令

  • fuser:用文件系统找出正在使用该文件的进程

    # 找出目前目录使用的PID账号的权限
    [root@node4 ~]# fuser -uv .用户     进程号 权限   命令
    /root:               root       1389 ..c.. (root)bash
    
  • lsof:找出进程使用的文件

    lsof不加参数,默认会列出所有呗开启的文件和设备
    lsof [-aUu] [+d]
    -a:
    -U:仅列出UNIX-like系统的socket文件类型
    -u:后面跟用户名,列出该用户的相关进程使用的文件
    +d:后面跟目录,某个目录下进程使用的文件
    
  • pidof:找出某个正在执行的进程的PID

    [root@node4 ~]# pidof nginx
    1303 1301
    

SElinux简介

SElinux是linux中的一个安全模块,是为了弥补传统的账号权限管理漏洞而产生的。

传统的文件权限是DAC,自主访问控制。依据进程的拥有者与文件资源的rwx权限来决定有无读写权限。它的缺陷在于:

  1. root具有最高权限。所以root被攻破就可以获取所有目录的读写权限。
  2. 用户可以获取进程从而修改文件资源的访问权限。

强制访问控制MAC,以策略规则制定特定进程读取特定的文件。Selinux就是通过MAC的方式来管理进程的。这样就解决了上面两个缺陷。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LangChain学习之旅】—(21)聊天客服机器人的开发(上)

【LangChain学习之旅】—(21)聊天客服机器人的开发(上) “聊天机器人”说明项目的技术实现细节技术实现步骤简述第二步:增加记忆机制第三步:增加检索机制总结“聊天机器人”说明 聊天机器人(Chatbot)是 LLM 和 LangChain 的核心用例之一,很多人学习大语言模型,学习 …

Java入门基础学习笔记19——关系运算符、逻辑运算符

关系运算符&#xff1a; 判断数据是否满足条件&#xff0c;最终会返回一个判断的结果&#xff0c;这个结果是布尔类型的值&#xff1a;true或false。 注意&#xff1a;在java中判断是否相等一定是“”&#xff0c;不要把“”写成“”&#xff0c;“”是赋值表达式。 package c…

社区新零售:家门口的便利与温暖

社区新零售&#xff1a;家门口的便利与温暖 随着都市生活节奏的加快&#xff0c;人们对于便捷、高效的生活方式有了更高的追求。社区新零售&#xff0c;作为零售业的一股新兴力量&#xff0c;正以其独特的魅力&#xff0c;悄然改变着我们的日常生活。 家门口的便利 社区新零…

嵌入式学习第三十三天!(二叉树)

1. 树的概念&#xff1a; 1. 树&#xff1a;由n个结点组成的有限集&#xff0c;有且只有一个根结点&#xff08;由根结点可以访问后继结点&#xff09;&#xff0c;其他结点只有一个前驱结点&#xff0c;但可以有多个后继结点&#xff08;一对多&#xff09;。当n 0时&#xf…

关于企鹅云

千万别用成都机房的云服务器&#xff01;忠告&#xff01;

OpenAI 刚刚宣布了 “GPT-4o“ 免费用户开放、通过 API 可用

OpenAI 刚刚宣布了 “GPT-4o”。它可以通过语音、视觉和文本进行推理。 该模型速度提高了 2 倍&#xff0c;价格降低了 50%&#xff0c;比 GPT-4 Turbo 的速率限制高出了 5 倍。 它将对免费用户开放、通过 API 可用。 与 GPT-4 相比&#xff0c;GPT-4o 的速度和额外的编码能力…

揭秘APP广告:变现逻辑全解析!

在当今的移动互联网时代&#xff0c;APP广告变现已经成为了各大应用开发者的主要营收来源之一。然而&#xff0c;随着科技的发展、用户行为的变化以及广告市场趋势的演进&#xff0c;APP广告变现逻辑也正在不断地进行优化和调整。本文将基于当前市场和技术趋势&#xff0c;为大…

Proteus新手入门之初学体验

Proteus是嵌入式工程师比较喜欢用的&#xff0c;可以实现从原理图布图、代码调试到单片机与外围电路协同仿真。作为一款功能强大的电子电路仿真软件&#xff0c;Proteus为电子爱好者和工程师们提供了一个理想的平台&#xff0c;用于设计、测试和验证各种电子电路。对于初学者来…

CSS 块状元素

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

Saas详解

1. 什么是Saas SaaS&#xff08;Software-as-a-Service&#xff09;&#xff0c;简单点理解就是软件即服务&#xff0c;即通过网络提供软件服务。 在SaaS模型中&#xff0c;用户不需要在本地安装软件&#xff0c;而是通过网络&#xff08;通常是浏览器&#xff09;访问应用程…

JVM的垃圾回收机制及其工作原理

Java 虚拟机&#xff08;JVM&#xff09;的垃圾回收机制&#xff08;GC&#xff09;旨在自动管理应用程序申请的内存。当对象不再被使用时&#xff0c;GC会自动释放它们所占据的堆内存&#xff0c;防止内存泄漏。 JVM内存区域&#xff1a; 在了解垃圾回收之前&#xff0c;要知…

LeetCode算法题:49. 字母异位词分组(Java)

给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate", "nat", …

答辩PPT自述稿如何准备?笔灵AI答辩PPT,自动生成演讲稿

很多快要毕业的同学在做答辩PPT的时候总是感觉毫无思路&#xff0c;一窍不通。但这并不是你们的错&#xff0c;对于平时没接触过相关方面&#xff0c;第一次搞答辩PPT的人来说&#xff0c;这是很正常的一件事。一个好的答辩PPT可以根据以下分为以下几部分来写。 1.研究的背景和…

试试这四个AI论文工具和降重技术,低成本高回报

在科研领域&#xff0c;AI写作工具如同新一代的科研利器&#xff0c;它们能够极大提高文献查阅、思路整理和表达优化的效率&#xff0c;本质上促进了科研工作的进步。AI写作工具不仅快速获取并整理海量信息&#xff0c;还帮助我们精确提炼中心思想&#xff0c;显著提升论文写作…

springBoot实现发送邮箱验证码 redis缓存源码

要在Spring Boot中实现发送邮箱验证码并使用Redis进行缓存&#xff0c;你需要遵循几个步骤。以下是一个简化的示例&#xff0c;展示了如何整合这些功能&#xff1a; 添加依赖 首先&#xff0c;确保你的pom.xml&#xff08;Maven&#xff09;或build.gradle&#xff08;Gradle…

研发管理-选择研发管理系统-研发管理系统哪个好

选择研发管理系统-研发管理系统哪个好 选择研发管理系统时&#xff0c;并没有一个绝对的“最好”的系统&#xff0c;因为每个企业的需求和情况都是独特的。然而&#xff0c;我可以向您介绍一些在市场上广受欢迎且功能强大的研发管理系统&#xff0c;供您参考&#xff1a; 1、彩…

MathType7.9中文官方最新破解汉化版无需许可证激活码

MathType是一个功能强大的数学公式编辑器&#xff0c;它能够帮助用户轻松地创建、编辑和排版各种数学公式。无论是学生、教师还是科研人员&#xff0c;都可以从MathType的丰富功能中受益。本文将为您详细介绍MathType的主要功能和使用方法&#xff0c;帮助您更好地利用这个工具…

web网页录音(recorder.js)并上传后端语音转文字(Vosk)

我是一个后端开发人员&#xff0c;现在都快进化成全栈了。操了&#xff0c;是谁有好的项目让我跳跳槽&#xff0c;转转行吧 写在前面&#xff0c;很重要 这是官方文档的说明 翻译如下&#xff1a; 我们有两种型号-大型号和小型号&#xff0c;小型号非常适合在移动应用程序上执…

远程服务器AutoDL登录/配环境/部署运行大模型方法

1. AutoDL autodl平台&#xff0c;是一个功能强大的本地大语言模型LLM运行专家,为用户提供了简单高效的方式来运行大型语言模型.通过优化设置和配置细节。 地址&#xff1a;AutoDL官方地址 2. 登录远程服务器方式 登录远程服务器的方式和工具有很多种 2.1 方法一 用AutoDL…

Android 编译文件简述(CMakeLists.txt)

Android 编译文件简述(CMakeLists.txt) CMakeLists.txt 是 CMake (Cross Platform Make)构建系统中用于配置项目的核心文件。它采用 CMake 自定义的语法,用于指定项目的组织结构、编译选项、依赖项等信息。通过编写 CMakeLists.txt 文件,可以实现跨平台的项目构建和管理。…