关于进程和会话

本文介绍了ORACLE实例的两种类型,单进程实例又称单用户ORACLE,一个进程执行全部代码,仅允许一个用户存取;多进程实例又称多用户ORACLE,使用多个进程执行不同部分,进程分为用户进程和ORACLE进程,后者又分服务器进程和后台进程。

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

ORACLE实例有两种类型:单进程实例和多进程实例。

单进程ORACLE(又称单用户ORACLE)是一种数据库系统,一个进程执行全部ORACLE代码。由于ORACLE部分和客户应用程序不能分别以进程执行,所以ORACLE的代码和用户的数据库应用是单个进程执行。 在单进程环境下的ORACLE 实例,仅允许一个用户可存取。例如在MS-DOS上运行O RACLE 。

多进程ORACLE实例(又称多用户ORACLE)使用多个进程来执行ORACLE的不同部分,对于每一个连接的用户都有一个进程。 在多进程系统中,进程分为两类:用户进程和ORACLE进程。当一用户运行一应用 程序,如PRO*C程序或一个ORACLE工具(如SQL*PLUS),为用户运行的应用建立一 个用户进程。ORACLE进程又分为两类:服务器进程和后台进程。服务器进程用于处理连接到该实例的用户进程的请求。当应用和ORACELE是在同一台机器上运行,而不再通过网络,一般将用户进程和它相应的服务器进程组合成单个的进程,可降低系统开销。然而,当应用和ORACLE运行在不同的机器上时,用户进程经过一个分离服务器进程与ORACLE通信。

### 进程、作业会话的区别 #### 1. **进程** 进程是操作系统中的基本单位,表示正在运行的程序实例。它是系统资源分配的基本单元,也是处理器调度的核心对象。每个进程都有独立的地址空间、内存、文件描述符其他资源[^1]。 在 Unix 系统中,进程由唯一的 PID(Process ID)标识,并且可以通过 fork exec 系列系统调用来创建新的进程。 #### 2. **作业** 作业通常指代一组相关的进程,这些进程共同完成一项任务。更具体地说,作业是由 shell 组织起来的一个或多个进程的集合[^2]。 例如,在 Shell 中执行一条命令时,Shell 将启动一个新的进程组来运行这条命令及其子进程。这个进程组即构成了一个作业。通过 `jobs` 命令可以在交互式 Shell 下查看当前活动的作业列表。 #### 3. **会话** 会话是一个更高层次的概念,用于组织多个进程组。它是一组共享同一控制终端的进程组的集合[^3]。 - 每个会话有一个唯一标识符 SID(Session ID),并且至少包含一个进程组。 - 控制终端(Controlling Terminal)与会话密切相关,只有会话 leader 才能建立与终端的关联[^1]。 - 当用户登录到系统时,通常会创建一个新的会话,其中可能包含多个作业以及更多的单个进程。 --- ### 关系总结 - **进程**是最基础的单位,负责实际的任务执行。 - 多个相关联的进程组成一个**作业**,便于统一管理操作。 - 而**会话**则进一步将多个作业组合在一起,形成更大的逻辑结构,方便跨作业级别的管理[^2]。 此外还需注意以下几点: - 每个会话最多只能有一个控制终端。 - 如果某个进程脱离了原来的会话并成为孤儿进程,则它可以被 init 或 systemd 收养[^1]。 ```c // 创建新会话的示例代码 #include <unistd.h> int main() { pid_t sid = setsid(); // 创建新会话并返回SID if (sid == -1) { perror("setsid"); return 1; } printf("New session created with SID %d\n", getpid()); return 0; } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值