【操作系统】第四话·进程和程序究竟有啥区别?

本文探讨了操作系统中进程和程序的区别,强调进程是动态的,具有封闭性、并发性、独立性和异步性等特征。文章介绍了进程控制块(PCB)的重要性,包括其组成部分。还讲解了进程的组成,如程序段、数据段和进程映像。最后提到了进程间通信的几种方式,如共享存储、消息传递和管道通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

🌕写在前面


Hello🤗大家好啊,我是kikokingzz,名字太长不好记,大家可以叫我kiko哦~

从今天开始,我们将要开启一个新的系列【闪耀计划】,没错!这是今年上半年的一整个系列计划!本专题目的是通过百天刷题计划,通过题目和知识点串联的方式完成对计算机操作系统的复习和巩固;同时还配有专门的笔记总结和文档教程哦!想要搞定,搞透计算机操作系统的同学,本专栏将会通过模块化的分类,刷够1000道题,为大家提供点对点的考点相关知识轰炸!值得注意的是,本专栏将会通过教程+课后习题的方式来进行巩固教学,课后习题的题量也是算入总题数的哦!

🎉🎉订阅本专栏,将为你带来最一手的备战秘籍!🎉🎉

🍊博客主页:kikoking的江湖背景🍊


🌟🌟往期必看🌟🌟

🔥【闪耀计划】第一话· 操作系统的基本概念

🔥【闪耀计划】第二话·现代操作系统的前世今生

🔥【闪耀计划】第三话·操作系统运行环境的层层细节

🔥【操作系统】第四话·进程和程序究竟有啥区别?

目录

🌕写在前面

🍺知识点6:进程的概念

🥝6.1 进程的概念

🍓1.进程与程序的区别

🍓2.进程的定义

🍓3.为什么要引入进程?

🍓4.什么是封闭性?

🍓5.进程有什么特征?

📜习题检测

🥝6.2 进程控制块

🍓1.什么是PCB?

🍓2.PCB的组成

📜习题检测

🥝6.3 进程的组成

🍓1.什么是程序段?

🍓2.什么是数据段?

🍓3.进程映像是什么?

🍓4.进程的内存空间

📜习题检测

🥝6.4 进程间通信

🍊1.共享存储

🍊2.消息传递

🍊3.管道通信

📜典型例题

🌕写在最后

热爱所热爱的, 学习伴随终生,kikokingzz与你同在!❥(^_-)

🍺知识点6:进程的概念

🥝6.1 进程的概念


🍓1.进程与程序的区别

进程是由多道程序的并发执行而引出来的,它和程序是两个截然不同的概念。

通过上图我们可以知道程进程与程序最大的区别就在于进程是动态的,同一个静态的程序可以对应多个不同的动态进程例如:同一个QQ程序可以形成多个动态的QQ进程。


🍓2.进程的定义

不同角度来说,进程可以有多种不同的定义,较为典型的一些定义例如:

(1)进程是程序的一次执行过程。

(2)进程是一个程序及其数据在处理机上顺序执行时所发生的活动。

(3)进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。

PS:这里的资源指的是处理机、存储器和其他设备服务于某个进程的“时间”。


🍓3.为什么要引入进程?

在多道程序环境下,允许多个程序并发执行,此时它们将失去封闭性,并具有间断性及不可再现性的特征。为此引入了进程的概念,以便更好地描述和控制程序的并发执行,实现操作系统的并发性和共享性。


🍓4.什么是封闭性?

封闭性:一个进程一旦开始执行,其执行结果只取决于它本身,不会受外界因素影响。

061.并发进程失去封闭性,是指( )。 
A.多个相对独立的进程以各自的速度向前推进
B.并发进程的执行结果与速度无关 
C.并发进程执行时,在不同时刻发生的错误
D.并发进程共享变量,其执行结果与速度有关

🍊详细题解:

A. 并没有解释失封闭性——即执行结果会受到外界因素影响。

B. 正是因为执行速度的影响,才导致了上图中进程A、C两次最终结果的不同。

C. 上图中进程A、C在执行过程中并没有发生错误,其执行结果是受到了外界因素的影响,才导致了最终结果的不同。

D. 上图进程A、C共享变量a,执行速度变化时,即执行步骤改变时,导致了其结果的不同;这正说明了进程A、C的执行结果不取决于其本身,受到彼此进程速度的影响。

✅正确答案:D


<think>我们想要通过ps命令查找Oracle后台进程,并仅输出进程ID(PID)。根据用户的需求,我们可以使用以下步骤: 1.使用`ps -ef`列出所有进程。 2.通过`grep`过滤出包含Oracle后台进程关键字的行(通常Oracle后台进程名以`ora_`开头,并且可能包含实例名)。 3.使用`awk`提取出进程ID(PID)。但是用户要求仅使用`ps``awk`,并且只输出PID。我们可以将`grep`的功能整合到`awk`中,因为`awk`本身支持模式匹配。 例如,查找所有以`ora_`开头的进程,并输出它们的PID:```bashps-ef| awk'/ora_/&& !/awk/ {print $2}' ```解释:- `ps -ef`:列出所有进程的详细信息。 -`awk'/ora_/ ...'`:awk脚本,匹配包含"ora_"的行。- `!/awk/`:排除掉包含"awk"的行(因为执行该命令时,`ps -ef`中会包含`awk`进程自身,我们不想包含它)。- `{print$2}`:打印第二列,即PID。 但是,注意Oracle后台进程通常以`ora_`开头,但可能后面跟着实例名。我们也可以根据进程的用户来过滤,因为Oracle进程通常由oracle用户运行。所以更精确的写法是: ```bashps -ef |awk '$1=="oracle" &&/ora_/{print $2}' ```这样我们只输出用户为oracle且进程名包含"ora_"的进程的PID。但是,如果用户希望同时排除grep进程(因为我们在管道中用了grep的,但这里我们没用grep,所以不需要排除grep,但需要排除awk自身),所以我们可以这样:```bashps-ef| awk'$1=="oracle"&& $8 ~/^ora_/ &&!/awk/{print$2}'``` 这里我们添加了`$8~ /^ora_/`,表示第8列(通常是命令名)以"ora_"开头。同时,我们仍然要排除awk进程自身,所以加上`!/awk/`。但是,由于我们使用管道,当前命令中可能包含`awk`,所以为了避免将当前这个awk命令的进程也包含进来,我们排除包含"awk"的行。然而,我们也可以不使用`!/awk/`,而是通过指定第8列以"ora_"开头,这样就不会匹配到awk进程了,因为awk进程的命令名不会是ora_开头。 因此,我们可以简化为:```bashps-ef| awk'$1=="oracle"&& $8 ~/^ora_/ {print $2}' ```这样就能输出所有oracle用户运行的、命令名以"ora_"开头的进程的PID。注意:在某些系统中,ps输出的命令列可能在第八列之后,因为命令可能带有参数。但是,Oracle后台进程的命令名通常就是`ora_xxxx_<SID>`,所以第八列就是进程名。如果上述命令输出为空,可能是因为命令列不在第八列?我们可以先看一下ps -ef的输出格式。通常,前几列是UID,PID,PPID, C, STIME,TTY, TIME, CMD。所以CMD列在第八列。但是,如果TTY列是?,那么它可能是一个字段,所以第八列确实是命令。为了确保正确,我们可以先手动查看一下: ```bashps -ef |head-n1&&ps -ef |grep ora_| head-n1```然后根据实际的列位置调整awk中的列号。但是,根据标准格式,PID是第二列,CMD是第八列。所以上述命令是可行的。所以,最终命令是: ```bashps -ef |awk '$1=="oracle" &&$8~ /^ora_/{print$2}'``` 如果用户想要一次性输出所有符合条件的PID,每行一个,那么上述命令即可。 另外,用户提到“参考站内引用”中的内容,但并没有直接相关的引用。不过引用[4][5]是关于进程父子关系信号处理的,当前问题无关。因此,我们给用户的回答可以如下:</think>### 查询 Oracle 19c 后台进程 PID(仅输出进程号) #### 精确查询命令 ```bash ps -ef | awk '$1=="oracle" && $8 ~ /^ora_/ {print $2}' ``` #### 命令解析: 1. **`ps -ef`** 列出所有进程的完整信息 2. **`awk` 过滤逻辑**: - `$1=="oracle"`:只处理属主为 `oracle` 用户的进程 - `$8 ~ /^ora_/`:匹配第 8 列(进程名)以 `ora_` 开头的行 - `{print $2}`:输出第 2 列(PID) #### 输出示例: ```bash 29441 29443 29786 30022 ``` (仅显示 Oracle 后台进程的纯数字 PID 列表) --- ### 扩展用法 #### 1. 按进程名过滤(如 PMON) ```bash ps -ef | awk '$1=="oracle" && $8 ~ /ora_pmon_/ {print $2}' ``` #### 2. 包含实例名过滤 ```bash # 替换 ORCL 为实际实例名 ps -ef | awk '$1=="oracle" && $8 ~ /ora_dbw0_ORCL/ {print $2}' ``` #### 3. 统计进程数量 ```bash ps -ef | awk '$1=="oracle" && $8 ~ /^ora_/ {count++} END {print count}' ``` --- ### 注意事项 1. **权限要求** 需以 `oracle` 用户或 `root` 执行 2. **进程识别** 典型 Oracle 后台进程命名规则: ```bash ora_pmon_<SID> # 进程监控 ora_dbw0_<SID> # 数据库写进程 ora_lgwr_<SID> # 日志写进程 ``` 3. **关闭进程警告** ⚠️ 直接 kill PID 可能导致数据库崩溃,推荐用 `shutdown immediate` 安全关闭[^4] --- ### 相关问题 1. 如何通过 PID 定位 Oracle 进程的具体功能? 2. 除了 `ps + awk`,还有哪些工具可以监控 Oracle 进程资源占用? 3. Oracle 后台进程意外终止后如何自动恢复? 4. 如何区分 Oracle 后台进程用户会进程
评论 62
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kikokingzz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值