当前位置: 首页 > news >正文

学习笔记(linux高级编程)11

进程间通信 ===》信号通信

    应用:异步通信。 中断,,

    1~64;32应用编程。

    如何响应:

     Term   Default action is to terminate the process.

       Ign    Default action is to ignore the signal.

       wait

       Core   Default action is to  terminate  the  process  and  dump  core  (see

              core(5)).

         gdb a.out -c core

       Stop   Default action is to stop the process.

       Cont   Default  action  is  to  continue  the  process  if  it is currently

              stopped.

    kill      -xx     xxxx

    发送进程  信号    接收进程

    kill -9 1000

    a.out  9 1000

    1、发送端

    #include <sys/types.h>

    #include <signal.h>

int kill(pid_t pid, int sig);

    功能:通过该函数可以给pid进程发送信号为sig的系统信号。

    参数:pid 要接收信号的进程pid

           sig 当前程序要发送的信号编号 《=== kill  -l

    返回值:成功 0

             失败  -1;

int raise(int sig)== kill(getpid(),int sig);

    功能:给进程自己发送sig信号

unsigned int alarm(unsigned int seconds);SIGALAM

    功能:定时由系统给当前进程发送信号

           也称为闹钟函数

           闹钟只有一个,定时只有一次有效,

           但是必须根据代码逻辑是否执行判断。

int pause(void);

    功能:进程暂停,不再继续执行,除非

           收到其他信号。

2、信号  kill  -l  ==>前32个有具体含义的信号

3、接收端

         每个进程都会对信号作出默认响应,但不是唯一响应。

         一般如下三种处理方式:

         1、默认处理

         2、忽略处理 9,19

         3、自定义处理 9,19 捕获

         以上三种方式的处理需要在如下函数上实现。

信号注册函数原型:

     void ( *signal(int signum, void (*handler)(int)) ) (int);


sighandler_t signal(int signum, sighandler_t handler);

ipcs -a 查询共享内存,信号量集,消息队列

    ipcrm -s 删除信号量集

           -m 删除共享内存

共享内存 ===》效率最高的进程间通信方式

system v :  共享内存  信号量集

   IPC对象操作通用框架:

   0x  ftok

   key值 ==> 申请 ==》读写 ==》关闭 ==》卸载

操作流程:

    key ==》申请对象 ==》映射对象==》读写对象

        ==》撤销映射 ==》删除对象

1.ftok()创建临时键值。

   #include <sys/types.h>

   #include <sys/ipc.h>

                "/etc"                         '!'

   key_t ftok(const char *pathname, int proj_id);

   功能:通过该函数可以将pathname指定的路径用来以

         proj_id生成唯一的临时键值。

   参数:pathname 路径+名称===》任意文件,只要不会

         被删除重建即可。

         proj_id  整形的数字,一般用ASCII码的单字符

         表示与参数1的运算。

   返回值:成功 返回唯一键值

            失败  -1;

2、申请对象:shmget()

   #include <sys/ipc.h>

   #include <sys/shm.h>

   ps aux|grep a.out

       share memory get               IPC_CREAT|0666

   int shmget(key_t key, size_t size, int shmflg);

   功能:使用唯一键值key向内核提出共享内存使用申请

   参数:key  唯一键值

         size  要申请的共享内存大小

         shmflg 申请的共享内存访问权限,八进制表示

         如果是第一个申请,则用IPC_CREAT

         如果要检测是否存在,用IPC_EXCL

   返回值:成功 返回共享内存id,一般用shmid表示

            失败  -1;

3.映射对象:shmat()

   void *shmat(int shmid, const void *shmaddr, int shmflg);

   功能:将指定shmid对应的共享内存映射到本地内存。

   参数:shmid 要映射的本地内存

         shmaddr 本地可用的地址,如果不确定则用NULL,表示

                  由系统自动分配。

         shmflg 

         0,表示读写

         SHM_RDONLY,只读

   返回值:成功 返回映射的地址,一般等于shmaddr

            失败 (void*)-1

http://www.lryc.cn/news/391306.html

相关文章:

  • vite+vue3+nginx配置统一公共前缀
  • android 国内下载Gradle源
  • mysql8一键安装脚本(linux) 拿走即用
  • C# 开发Winform DataGridView的增删改查实战
  • CentOS 7镜像列表服务下线,还想继续使用该怎么办?
  • 代码随想录训练营第二十八天 122买卖股票的最佳时间II 55跳跃游戏 45跳跃游戏II 1005K次取反后最大化的数组和
  • 在node环境使用MySQL
  • spdlog一个非常好用的C++日志库(四): 源码分析之logger类
  • 逻辑这回事(七)---- 器件基础
  • 中俄汽车产业链合作前景广阔,东方经济论坛助力双边合作与创新
  • 第六篇:精通Docker Compose:打造高效的多容器应用环境
  • C++视觉开发 一.OpenCV环境配置
  • 大数据面试题之Kafka(3)
  • 视频监控平台web客户端的免密查看视频页:在PC浏览器上如何调试手机上的前端网页(PC上的手机浏览器的开发者工具)
  • 力扣2488.统计中位数为 K 的子数组
  • Zabbix对接Elasticsearch(ES)数据库(未成功)
  • 【unity实战】使用Unity实现动作游戏的攻击 连击 轻重攻击和打击感
  • ELK 企业实战7
  • linux 下neo4j的安装
  • Flink ProcessFunction不同流异同及应用场景
  • Matplotlib 文本
  • 信创产业政策,信创测试方面
  • 微信云数据库迁移到unicloud云数据库
  • 快速上手文心一言指令
  • 零基础STM32单片机编程入门(五)FreeRTOS实时操作系统详解及实战含源码视频
  • leetCode.96. 不同的二叉搜索树
  • PyAutoGUI 使用详解
  • MySQL——备份
  • 科东软件精彩亮相华南工博会,展现未来工业前沿技术
  • 详解flink sql, calcite logical转flink logical