一个进程向指定进程发信号, 并传递数据

发送端代码如下:

send_data_signo.c

#include <signal.h>
#include <stdio.h>
#include <stdlib.h>int main(int argc, char ** argv)
{union sigval    value;int        signum = SIGTERM;    // 默认发送SIGTERM
    pid_t        pid;int        i;/*初始化*/value.sival_int = 0;    /*检查参数的个数*/if (argc != 3 && argc != 5 && argc != 7) {printf("./send_data_signo <-d data> <-s signum> [-p][data]\n");exit(1);}/*从命令行参数解析出信号编号、PID以及待传递的数据*/for (i=1; i<argc; i++) {if (!strcmp(argv[i], "-d")) {value.sival_int = atoi(argv[i+1]);continue;}if (!strcmp(argv[i], "-s")) {signum = atoi(argv[i+1]);continue;}if (!strcmp(argv[i], "-p")) {pid = atoi(argv[i+1]);continue;}}/*利用sigqueue给pid发送信号signum,并携带数据value*/if (sigqueue(pid, signum, value) < 0) {perror("sigqueue");exit(1);}return 0;
}

接收端代码如下:

#include <signal.h>
#include <stdio.h>/*三参数的信号处理程序*/
void handler_sigint(int signo, siginfo_t *siginfo, void * pvoid)
{printf("recv SIGINT, the data value is:%d\n", siginfo->si_int);
}int main()
{struct sigaction act;/*赋值act结构*/act.sa_sigaction = handler_sigint;act.sa_flags = SA_SIGINFO;        // 指定使用三参数的信号处理函数/*安装信号处理函数*/sigaction(SIGINT, &act, NULL);while(1);return 0;
}

编译/链接后, 分别在两个终端执行, 输出如下:

接收端打印信号, 及携带的数据

发送端

发送端向进程号为18617的进程发信号2(SIGINT)并携带数据, 后又发9(SIGKILL)也携带数据.

转载于:https://www.cnblogs.com/zhanglong71/p/5104003.html

进程之间信号收发并携带数据相关推荐

  1. 用WM_COPYDATA消息来实现两个进程之间传递数据

    文着重讲述了如果用WM_COPYDATA消息来实现两个进程之间传递数据. 进程之间通讯的几种方法: 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯.常用的方法有   1.使用内存映 ...

  2. 使用内存映射文件在进程之间共享数据

    数据共享方法是通过让两个或多个进程映射同一个文件映射对象的视图来实现的,这意味着它们将共享物理存储器的同一个页面.因此,当一个进程将数据写入一个共享文件映射对象的视图时,其他进程可以立即看到它们视图中 ...

  3. python跨文件全局变量_Python 进程之间共享数据(全局变量)的方法

    进程之间共享数据(数值型): import multiprocessing def func(num): num.value=10.78 #子进程改变数值的值,主进程跟着改变 if __name__= ...

  4. Python 进程之间共享数据(全局变量)

    Python 进程之间共享数据(全局变量) 进程之间共享数据(数值型): import multiprocessing def func(num): num.value=10.78 #子进程改变数值的 ...

  5. python进程共享全局变量 时延_Python 进程之间共享数据(全局变量)的方法

    进程之间共享数据(数值型): import multiprocessing def func(num): num.value=10.78 #子进程改变数值的值,主进程跟着改变 if __name__= ...

  6. Linux两个进程交换信息,如何在Linux中的进程之间交换二进制数据

    我需要创建一个可以进行无线网络扫描的linux应用程序,将结果放入一个结构中并以某种方式将其发送到另一个将使用该数据的主应用程序.我最初的想法是在主应用程序中创建一个管道,fork并通过execl启动 ...

  7. linux_进程类相关学习-fork函数-getpid函数-getppid函数-getuid函数-geteuid函数-getgid函数-getegid函数-进程之间共享数据-进程gdb调试

    接上一篇:linux_环境变量-C语言代码打印环境变量-getenv函数-setenv函数-unsetenv函数 本次来分享进程类相关的学习,主要就是分享一些函数的使用,来,开始上菜: 目录 1.fo ...

  8. 信号实现父子进程之间的同步--sigsuspend的作用

    函数原型: #include <signal.h> int sigsuspend(const sigset_t *mask); 作用: 用于在接收到某个信号之前,临时用mask替换进程的信 ...

  9. Linux进程之间通信 信号

    2) SIGINT 程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程. 3) SIGQUIT 和SIGINT类似, 但由QUIT字符 ...

最新文章

  1. 如何在Java中比较日期? [重复]
  2. java - 把日志生成到指定目录
  3. Blockchain-Based Flexible Double-Chain Architecture and Performance Optimization for Better Sustaina
  4. JS实现键盘事件上下翻页
  5. 全球顶级银行资管子公司的启示
  6. win7笔记本电脑设置WiFi热点
  7. 如何拼接多张图片,多张图片拼接成一张
  8. Android 视频播放 界面变形处理
  9. retrofit原理面试,2021最新百度、头条等公司Android社招面试题目,含答案解析
  10. ARPU与ARPPU 的概念
  11. Windows10 笔记本电脑移动硬盘设备未就绪
  12. css inherit
  13. 从shape类扩展出一个正五边形类(求五边形的面积和周长)----java
  14. cad四边形展开lisp_CAD的LISP功能函数一览表
  15. 2021年5月系统集成项目管理工程师基础知识真题讲解
  16. TFRecord数据集制作
  17. 在线中文摩尔斯密码加密解密工具
  18. 推荐算法面试集锦--算法模型
  19. Linux驱动程序Makefile详解
  20. OpenSSL 概述

热门文章

  1. 使用idea开发SpringBoot应用,添加@SpringBootApplication注解时,不能自动提示
  2. mysql数据没有同步更新_MySQL数据库主从没有同步的两种解决方案
  3. Ubuntu Server 如何校对时钟(通过NTP)
  4. 搞清字库表、编码字符集、字符编码
  5. Android图表引擎AChartEngine - 简介
  6. PhoneGap的Android端插件开发
  7. MFC三大dll使用总结
  8. 一、Nginx源码安装与yum安装
  9. 一个按钮多个ajax,如何为表格中的多个按钮设置AJAX调用
  10. Spark中repartition和coalesce的区别与使用场景解析