Day52 Linux 共享内存通信 进程组和对话 系统守护进程介绍和创建 信 机制

目录

共享内存通信

1.概述

2.共享内存原理

3.共享内存接口函数及指令

 进程组和对话

1.概念和特性

2. 创建会话

 3.getsid函数

4.setsid函数 

 系统守护进程介绍和创建

1.守护进程简介

2.创建守护进程步骤

信 机制

1.信 概念

2.信息机制

2.与信 相关的事件和状态

3.信 编

 4.信 四要素

信 的产生

1.终端按键产生信

 2.硬件异常产生信

 3.kill函数、命令产生信

4.软件产生信


共享内存通信

1.概述

允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存连接到他们自己的地址空间中,所有的进程都可以访问共享内存中的地址。如果某个进程向共享内存写入数据, 所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。

2.共享内存原理

Linux系统中,每个进程都有属于自己进程控制块(PCB)和地址空间(AddrSpace),并且都有一个==页表==与之对应, 负责将进程的虚拟地址与物理地址进行映射,通过内存管理单元 (MMU) 进行管理。 两个不 同的虚拟地址通过页表映射到物理空间的同一区域,它们所指向的这块区域即共享内存。

3.共享内存接口函数及指令

(1)查看系统中的共享存储段

ipcs -m 

(2)删除系统中的共享存储段

ipcs -m [shmid]

 (3)shmget()创建共享内存

int shmget ( key_t key , size_t size , int shmflg ); 1 key : ftok 生成的 key 标识,标识系统的唯一 IPC 资源 2 size : 需要申请共享内存的大小 3 shmflg : 访问权限(和文件权限一致) 如果是共享内存不存在,则需要使用 IPC_CREAT IPC_EXCL 创建共享内存, 如果是共享内存已经存在,可以使用 IPC_CREAT 或直接传 0 ,获得共享内存 返回值:         成功返回一个新建或已经存在的的共享内存标识符,取决于shmflg 的参数         失败返回 1

(4)shmat()挂接共享内存

void * shmat ( int shmid , const void * shmaddr , int shmflg ); 1 shmid : 共享存储段的标识符 2 shmaddr : shmaddr = NULL , 则存储段连接到由内核选择的第一个可以地址上 ( 推荐使用 ) 3 shmflg ; 若指定 SHM_RDONLY 位,则以只读方式连接此段 , 0 是以读写方式连接此段 返回值:         成功返回共享存储段的指针 ( 虚拟地址 )         失败返回 1

(5) shmdt()去关联共享内存

当一个进程不需要共享内存的时候,就需要去关联。该函数并不删除所指定的共享内存区,而是将之前用shmat函数连接好的共享内存区脱离目前的进程

int shmdt ( const void * shmaddr ); 参数: shmadr : 连接以后返回的地址 返回值:         成功返回0         失败返回 1

 (6)shmctl()销毁共享内存

int shmctl ( int shmid , int cmd , struct shmid_ds * buf ); 1 shmid : 共享存储段标识符 2 cmd : 指定的执行操作,设置为 IPC_RMID 时表示可以删除共享内存 3 buf : 设置为 NULL 即可 返回值:         成功返回0         失败返回 1

 例程如下

 进程组和对话

1.概念和特性

进程组,每个进程组有一个领头进程。进程组是一个或多个进程的合集,通常它们与一组作业相关联,可以接受来自同一终端的各种信

每个进程组都有唯一的进程组ID(整数,也可以存放在pid_t类型中)。进程组由进程组ID来唯一标识。除 了进程 (PID)之外,进程组ID也是一个进程的必备属性之一

getpgrp : 获得进程组 id , 即领头进程的

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年9月22日
下一篇 2022年9月22日

相关推荐