第十六章、【Linux】程序管理与SELinux初探

16.1 什么是程序 (process)

在Linux 系统当中:“触发任何一个事件时,系统都会将他定义成为一个程序,并且给予这个程序一个 ID ,称为 PID,同时依据启发这个程序的使用者与相关属性关系,给予这个 PID 一组有效的权限设置。” 从此以后,这个 PID 能够在系统上面进行的动作,就与这个 PID 的权限有关了!

16.1.1 程序与程序 (process & program)

如何产生一个程序?就是“执行一个程序或指令”就可以触发一个事件而取得一个PID。系统是仅认识binary file的,那么当我们要让系统工作的时候,当然就是需要启动一个 binary file,那个 binary file 就是程序 (program)。

那我们知道,每个程序都有三组人马的权限,每组人马都具有 r/w/x 的权限,所以:“不同的使用者身份执行这个 program 时,系统给予的权限也都不相同!”举例来说,我们可以利用touch 来创建一个空的文件,当 root 执行这个 touch 指令时,他取得的是 UID/GID = 0/0 的权限,而当 dmtsai (UID/GID=501/501) 执行这个 touch 时,他的权限就跟 root 不同。概念图如下:

                                      

                                     图16.1.1、程序被载入成为程序以及相关数据的示意图

如上图所示,程序一般是放置在实体磁盘中,然后通过使用者的执行来触发。触发后会载入到内存中成为一个个体,那就是程序。 为了操作系统可管理这个程序,因此程序有给予执行者的权限/属性等参数,并包括程序所需要的指令码与数据或文件数据等, 最后再给予一个PID 。系统就是通过这个 PID 来判断该 process 是否具有权限进行工作的。

举个更常见的例子,我们要操作系统的时候,通常是利用连线程序或者直接在主机前面登陆,然后取得我们的 shell。shell就是bash,bash在/bin/bash,同时间的每个人登陆都是执行/bin/bash,不过每个人取得的权限就是不同。也就是说,我们可以这样看:

                              

                                                 图16.1.2、程序与程序之间的差异

也就是说,当我们登陆并执行 bash 时,系统已经给我们一个 PID 了,这个 PID 就是依据登陆者的 UID/GID (/etc/passwd)。以上面的图 16.1.2 配合图 16.1.1 来做说明的话,我们知道 /bin/bash 是一个程序 (program),当 dmtsai 登陆后,他取得一个 PID 号码为2234 的程序,这个程序的 User/Group 都是 dmtsai ,而当这个程序进行其他作业时,例如上面提到的 touch 这个指令时, 那么由这个程序衍生出来的其他程序在一般状态下,也会沿用这个程序的相关权限的!

让我们将程序与程序作个总结:

程序 (program):通常为 binary program ,放置在储存媒体中 (如硬盘、光盘、软盘、磁带等), 为实体文件的型态存在;

程序 (process):程序被触发后,执行者的权限与属性、程序的程序码与所需数据等都会被载入内存中, 操作系统并给予这个内存内的单元一个识别码 (PID),可以说,程序就是一个正在运行中的程序。

子程序与父程序:

在上面的说明里面,我们有提到所谓的“衍生出来的程序”,当我们登陆系统后,会取得一个 bash 的 shell ,然后,我们用这个 bash 提供的接口去执行另一个指令,例如 /usr/bin/passwd 或者是 touch 等等,那些另外执行的指令也会被触发成为 PID,那个后来执行指令才产生的 PID 就是“子程序”了,而在我们原本的 bash 环境下,就称为“父程序”了。

                      

                                                    图16.1.3、程序相关系之示意图

程序彼此之间是有相关性的。以上面的图示来看,连续执行两个 bash后,第二个 bash 的父程序就是前一个 bash。因为每个程序都有一个 PID ,那某个程序的父程序该如何判断?就通过 Parent PID (PPID) 来判断即可。

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

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

相关文章

【网络】传输层——UDP | TCP(协议格式确认应答超时重传连接管理)

🐱作者:一只大喵咪1201 🐱专栏:《网络》 🔥格言:你只管努力,剩下的交给时间! 现在是传输层,在应用层中的报文(报头 有效载荷)就不能被叫做报文了,而是叫做数…

PDF Expert 3.3 for mac

PDF Expert是一款专业的PDF编辑和阅读工具。它可以帮助用户在Mac、iPad和iPhone等设备上查看、注释、编辑、填写和签署PDF文档。 以下是PDF Expert的特点: PDF编辑:PDF Expert提供了丰富的PDF编辑功能,包括添加、删除、移动、旋转、缩放、裁…

链表有无环以及确定入环口详解

142.环形链表 II 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测…

redis的事务和watch机制

这里写目录标题 第一章、redis事务和watch机制1.1)redis事务,事务的三大命令语法:开启事务 multi语法:执行事务 exec语法:取消事务 discard 1.2)redis事务的错误和回滚的情况1.3)watch机制语法&…

Django框架-使用celery(一):django使用celery的通用配置,不受版本影响

目录 一、依赖包情况 二、项目目录结构 2.1、怎么将django的应用创建到apps包 三、celery的配置 2.1、celery_task/celery.py 2.2、celery_task/async_task.py 2.3、celery_task/scheduler_task.py 2.4、utils/check_task.py 四、apps/user中配置相关处理视图 4.1、基本…

Vue [Day7] 综合案例

核心概念回顾 state:提供数据 getters:提供与state相关的计算属性 mutations:提供方法,用于修改state actions:存放异步操作 modules:存模块 功能分析 https://www.npmjs.com/package/json-server#ge…

3.UE基本操作及数字人工程模块组成(UE数字人系统教程)

1.Fay-UE5数字人工程导入 2.UE数字人语音交互 3.UE基本操作及数字人工程模块组成(UE数字人系统教程) 一、ue5基本操作 1、项目文件管理 2、关卡素材编辑 在关卡上:w、s、a、d移动,鼠标右键拖动换视角。 二、数字人工程模…

开源力量再现,国产操作系统商业化的全新探索

文章目录 1. 开源运动的兴起2. 开源力量的推动3. 国产操作系统的崭露头角3.1 国产操作系统有哪些 4.国产操作系统的商业化探索5.开源力量对国产操作系统商业化的推动 操作系统作为连接硬件、中间件、数据库、应用软件的纽带,被认为是软件技术体系中最核心的基础软件…

火爆全网,HttpRunner自动化测试框架-parameters参数化(超细整理)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 在使用HttpRunner…

Tomcat的一些配置问题(server.xml/catalina.sh)

在同一机器中运行多个Tomcat时,如果不修改server.xml的端口参数,会出现端口冲突使得Tomcat异常;Tomcat默认配置中,JAVA_OPTS不会设置太大,一般需要在catalina.sh中增加一行配置来加大该参数值。 目录 1.Server.xml配置…

有人真的会去分析代码吗

很早之前使用 webpack 的时候,也有类似的插件,分析打包出来之后的代码,分别是哪些模块比较庞大,针对打包的内容进行优化。说实话,知道归知道,但是没有哪个项目使用分析过。最近刚好看见了两个插件&#xff…

DOM的节点操作+事件高级+DOM事件流+事件对象

一.节点操作 1.父节点: node.parentNode 得到的是离元素最近的父级节点 2.子节点: parentNode.childNodes 所有的子节点 包含元素节点 文本节点等等parentNode.children (非标准) 获取所有的子元素节点,实际开发常用 parentNode.firstChild 获取…

clion run qt 问题汇总

一、Error copying file “D:/soft/QT/5.15.2/mingw81_64/bin/Qt5Cored.dll” to “D:/work/Ccode/qtproject/cmake-build-debug-qtmingw”.报错 查看路径下确实没有Qt5Cored.dll,只有Qt5Core.dll 注释掉cmakelist中的这三行 重新执行后成功 二、使用CLion编辑u…

前端探索之旅

目录 简介:内容大纲:第一章 前端开发简介1.1 前端开发的定义和作用1.2 前端开发的职责1.3 前端开发的技能要求1.4 前端开发的发展前景总结: 第二章 HTML基础2.1 HTML基本结构2.2 常见HTML标签和元素 第三章 CSS基础3.1 CSS基本语法3.2 常见CSS选择器3.3 常见CSS属性…

MySQL之 show profile 相关总结

MySQL之 show profile 相关总结 MySQL官网show profile介绍:https://dev.mysql.com/doc/refman/8.0/en/show-profile.html 1. 简介 show profile 和 show profiles 命令用于展示SQL语句的资源使用情况,包括CPU的使用,CPU上下文切换&#xf…

nvm下载node导致npm报错无法使用

有个依赖库需要更新下node,用nvm下载后项目跑不起来了,npm -v 还报错 其实一开始是npm下载不来,然后换了淘宝镜像后还是报错 然后就只能手动下载下了 进入node.js官网 https://nodejs.org/en/download 下载后注意要安装在你nvm目录中&#x…

windows安装apache-jmeter-5.6.2教程

目录 一、下载安装包(推荐第二种) 二、安装jmeter 三、启动jmeter 一、下载安装包(推荐第二种) 1.官网下载:Apache JMeter - Download Apache JMeter 2.百度云下载:链接:https://pan.baidu.…

【算法挨揍日记】day01——双指针算法_移动零、 复写零

283.移动零 283. 移动零https://leetcode.cn/problems/move-zeroes/ 题目: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 …

Xcode升级导致关联库报错

想办法找到对应的库 然后到 Build Phases -- LinkBinary With Libraries中点击,选择对应的framework即可,就像我工程的报错 Undefined symbol: _OBJC_CLASS_$_ADClient _OBJC_CLASS_$_ASIdentifierManager 缺失的库是AdSupport.framework 添加后再次编…

【服务平台】Rancher运行和管理Docker和Kubernetes,提供管理生产中的容器所需的整个软件堆栈

Rancher是一个开源软件平台,使组织能够在生产中运行和管理Docker和Kubernetes。使用Rancher,组织不再需要使用一套独特的开源技术从头开始构建容器服务平台。Rancher提供了管理生产中的容器所需的整个软件堆栈。  完整软件堆栈 Rancher是供采用容器的团…