首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

进程通讯(三).signal

前言 UNIX/Linux 是多任务操作系统,通过多个进程分别处理不同事务来实现,如果多个进程要进行协同工作或者争用同一个资源时,互相之间通讯就很有必要了 进程通信,Inter process...) 消息队列 ( message queues ) 共享内存 ( shared memory ) 套接字 ( socket ) 这里分享一下我在学习进程通讯过程中笔记和心得 ---- 概要 ----...,产生信号事件对进程而言是随机出现进程不能简单地测试一个变量来判断是否发生了一个信号,而是必须告诉内核,在此信号发生时,请执行下列操作 在某个信号出现时,可以让内核按下列三种方式之一进行处理 1....= ret) //A ,也就是子进程 { int sig=40; pid_t pid=getpid(),ppid=getppid(); //获取自己和父亲进程号 sleep...{ pid_t pid=getpid(),cpid=ret; //获取自己和子进程进程号 int sig=9; printf("B:this is father, pid

1.5K10

Linux进程通讯方式 - UNIX Domain Socket

概述 Linux进程通讯方式有很多,比较典型有套接字,平时比较常用套接字是基于TCP/IP协议,适用于两台不同主机上两个进程通信, 通信之前需要指定IP地址....但是如果同一台主机上两个进程通信用套接字,还需要指定ip地址,有点过于繁琐....流套接字)和SOCK_DGRAM(数据包套接字),由于是在本机通过内核通信,不会丢包也不会出现发送包次序和接收包次序不一致问题 流程介绍 如果熟悉Socket的话,UDS也是同样方式, 区别如下...return -1; } send(sock_fd,buffer,BUFFER_SIZE,0); close(sock_fd); return 0; } 参考 Linux...下IPC-UNIX Domain Socket 进程通信之六 UDS 进程通信简介(一) Unix域套接字(Unix Domain Socket)介绍

5.8K30
您找到你想要的搜索结果了吗?
是的
没有找到

进程通讯(一).pipe

前言 UNIX/Linux 是多任务操作系统,通过多个进程分别处理不同事务来实现,如果多个进程要进行协同工作或者争用同一个资源时,互相之间通讯就很有必要了 进程通信,Inter process...) 消息队列 ( message queues ) 共享内存 ( shared memory ) 套接字 ( socket ) 这里分享一下我在学习进程通讯过程中笔记和心得 ---- 概要 ----...它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程以及同一进程内不同线程之间同步手段。...共享内存是最快 IPC 方式,它是针对其他进程通信方式运行效率低而专门设计。它往往与其他通信机制,如信号量,配合使用,来实现进程同步和通信。...套接字( socket ) : 套接字也是一种进程通信机制,与其他通信机制不同是,它可用于不同主机进程通信。

66230

C# 进程通讯

一、进程通讯方式 1)共享内存 包括:内存映射文件,共享内存DLL,剪切板。 2)命名管道及匿名管道 3)消息通讯 4)利用代理方法。例如SOCKET,配置文件,注册表方式。 等方式。...进程通讯方式有很多,常用有共享内存(内存映射文件、共享内存DLL、剪切板等)、命名管道和匿名管道、发送消息等几种方法来直接完成,另外还可以通过socket口、配置文件和注册表等来间接实现进程间数据通讯任务...以上这几种方法各有优缺点,具体到在进程进行大数据量数据快速交换问题上,则可以排除使用配置文件和注册表方法;另外,由于管道和socket套接字使用需要有网卡支持,因此也可以不予考虑。...二、发送消息实现进程通讯前准备 下面的例子用到一个windows api 32函数 [DllImport("User32.dll", EntryPoint = "SendMessage")] private...三、发送消息实现进程通讯具体步骤 1.新建windows应用程序 (1)打开VS2008,新建一个“windows 应用程序”,主窗口为Form1,项目名称:ProcessCommunication

1.4K20

进程通讯(四).非亲缘进程交互信号

前言 UNIX/Linux 是多任务操作系统,通过多个进程分别处理不同事务来实现,如果多个进程要进行协同工作或者争用同一个资源时,互相之间通讯就很有必要了 进程通信,Inter process...communication,简称 IPC,在 UNIX/Linux 下主要有以下几种方式: 无名管道 ( pipe ) 有名管道 ( fifo ) 信号 ( signal ) 信号量 ( semaphore...) 消息队列 ( message queues ) 共享内存 ( shared memory ) 套接字 ( socket ) 这里分享一下我在学习进程通讯过程中笔记和心得 Tip: 前面分别演示了...FIFO 和 signal 功能,FIFO 可以实现非亲缘进程通讯,signal可以实现父子进程发送信号,将两者结合可以实现非亲缘进程交互信号 ---- 概要 ---- 代码示例 要求 有A...return res; } printf("B:my pid is %d, other process pid is %d\n",pid,opid); //打印出自己pid和从管道中获取另一个进程

93710

进程通讯(七).socket(3)

EBADF:sockfd参数为非法文件描述符 EINVAL:socket已经和地址绑定 ENOTSOCK:参数sockfd为文件描述符 Tip: bind函数并不是总是需要调用,只有用户进程想与一个具体地址或端口相关联时候才需要调用这个函数...如果用户进程没有这个需要,那么程序可以依赖内核自动选址机制来完成自动地址选择,而不需要调用bind函数,同时也避免不必要复杂度。...在一般情况下,对于服务器进程问题需要调用bind函数,对于客户进程则不需要调用bind函数 ---- listen sys/socket.h 中有关于 listen 定义 /* Prepare to...由于系统默认时认为一个套接字是主动连接,所以需要通过某种方式来告诉系统,用户进程通过系统调用listen来完成这件事 listen函数可使得流套接字sockfd处于监听状态,使得一个进程可以接受其它进程请求...,从而成为一个服务器进程

95420

进程通讯(二).fifo(1)

前言 UNIX/Linux 是多任务操作系统,通过多个进程分别处理不同事务来实现,如果多个进程要进行协同工作或者争用同一个资源时,互相之间通讯就很有必要了 进程通信,Inter process communication...,简称 IPC,在 UNIX/Linux 下主要有以下几种方式: 无名管道 ( pipe ) 有名管道 ( fifo ) 信号 ( signal ) 信号量 ( semaphore ) 消息队列 ( message...queues ) 共享内存 ( shared memory ) 套接字 ( socket ) 这里分享一下我在学习进程通讯过程中笔记和心得 ---- 概要 ---- FIFO FIFO 有时被称为命名管道...匿名管道 pipe 只能在两个相关进程之间使用,而且这两个相关进程还要有一个共同创建它们祖先进程,而通过 FIFO 不相关进程也能交换数据 在 sys/stat.h 中有关于 mkfifo...(非亲缘),实现如下功能: 1.A进程将字符串如“12345”发送给B进程 2.B进程收到后显示为“54321”,并将首尾两个字符去掉后,反传给A进程 3.A进程收到后显示为“432” 要求:用fifo

54010

进程通讯(七).socket(2)

二者占用内存大小是一致,因此可以互相转化,从这个意义上说,他们并无区别 ---- socket sys/socket.h 中有关于 socket 函数声明 /* Create a new socket...协议族决定了socket地址类型,在通信中必须采用对应地址,如AF_INET决定了要用ipv4地址(32位)与端口号(16位组合、AF_UNIX决定了要用一个绝对路径名作为地址 __type...“高对低,低对高”(即一个数高位字节存放于低地址单元,低位字节存放在高地址单元中)。...但是计算机内存存储数据时有可能是大端顺序或者小端顺序 而上面的函数就是用来进行这方面转化工作 h:host 本地主机端 to:就是to,转化为 n:net 网络端 l:是 unsigned long...__level 指定选项代码类型 __optname 选项名称 __optval 是一个指向变量指针,类型为整形 __optlen optval size大小 标志打开或关闭某个特征二进制选项

57910

进程通讯(七).socket(1)

前言 UNIX/Linux 是多任务操作系统,通过多个进程分别处理不同事务来实现,如果多个进程要进行协同工作或者争用同一个资源时,互相之间通讯就很有必要了 进程通信,Inter process communication...queues ) 共享内存 ( shared memory ) 套接字 ( socket ) 这里分享一下我在学习进程通讯过程中笔记和心得 ---- 概要 ---- 套接字 之前各种通信机制如:pipe...,FIFO,message queue,signal ,semaphore ,shared memory 都局限于同一台计算机上进程通信 但是要实现不同计算机(通过网络相连)上进程互相通信,就需要网络进程通信...(network IPC) 套接字允许进程与不同计算机上以及同一计算机上其它进程通信 网络上两个程序通过一个双向通信连接实现数据交换,这个连接一端称为一个socket 建立网络通信连接至少要一对端口号...客户软件将插头插到不同编号插座,就可以得到不同服务 ---- 代码示例 要求 编写一个网络通讯程序,客户端通过指定IP地址方式向服务端发送一段字符串,服务端收到后显示并且作出响应,然后退出 代码示例

60420

前端进程通讯渗透之术

这次介绍另外一种进程渗透内存玩法,适用于网页和iframe常见博弈。...---- 进程通讯方式 父页面和子页面(iframe)处于2个不同进程(即使在同一个域),进程之间通讯必须通过每个进程内【事件监听所在线程】来完成。...最重要是,通讯时传输数据格式必须是序列化格式,序列化格式指【一维】【线性】数据类型比如字符串、字节流等,在浏览器中有这么几种序列化格式可选: 字符串:可以传普通文本信息 JSON:最流行格式...iframe内容,这两种方法优点是:子页面的开发商只需要一点点配合就能实现,主动权掌握在父页面手中。...---- 直接访问同域iframe内存 有一种特殊情况下,不同进程可以共享内存空间:如果父页面和iframe同域,问题就简单多了,也不必传输序列化数据了,父页面可以直接访问并修改iframe全局作用域

1.6K31

进程通讯(六).semaphore and shared(1)

前言 UNIX/Linux 是多任务操作系统,通过多个进程分别处理不同事务来实现,如果多个进程要进行协同工作或者争用同一个资源时,互相之间通讯就很有必要了 进程通信,Inter process communication...queues ) 共享内存 ( shared memory ) 套接字 ( socket ) 这里分享一下我在学习进程通讯过程中笔记和心得 ---- 概要 ---- 信号量 为了防止出现因多个程序同时访问一个共享资源而引发一系列问题...临界区域是指执行数据更新代码需要独占式地执行。而信号量就可以提供这样一种访问机制,让一个临界区同一时只有一个线程在访问它,也就是说信号量是用来调协进程对共享资源访问。...Tip: 引自 《Linux进程通信——使用信号量》 信号量与已经介绍过IPC机构(管道、FIFO以及消息列队)不同,它是一个计数器,用于为多个进程提供对共享数据对象访问 为了获得共享资源,进程需要执行下列操作...Tip: 引自 《Linux进程通信——使用共享内存》 共享存储允许两个或多个进程共享一个给定存储区,因为数据不需要在客户进程和服务进程之间复制,所以这是最快一种IPC,使用共享存储时要掌握唯一窍门是

69820

进程通讯(五).message queue(2)

,消息将依旧保留在内核中,直到重启系统,消息持久性,界于进程与磁盘之间 { perror("msgctl"); return res; } res=0; return...表示忽略;IPC_NOWAIT,如果消息队列为空,则返回一个ENOMSG,并将控制权交回调用函数进程。...如果不指定这个参数,那么进程将被阻塞直到函数可以从队列中得到符合条件消息为止。如果一个client 正在等待消息时候队列被删除,EIDRM 就会被返回。...如果进程在阻塞等待过程中收到了系统中断信号,EINTR 就会被返回。MSG_NOERROR,如果函数取得消息长度大于msgsz,将只返回msgsz 长度信息,剩下部分被丢弃了。...,仍在使用这一队列进程在下次对队列进行操作时会出错返回 函数成功时返回0,失败时返回-1 ---- msqid_ds 在 bits/msq.h 中有关于 msqid_ds 定义 /* Structure

76420

进程通讯(五).message queue(1)

前言 UNIX/Linux 是多任务操作系统,通过多个进程分别处理不同事务来实现,如果多个进程要进行协同工作或者争用同一个资源时,互相之间通讯就很有必要了 进程通信,Inter process communication...queues ) 共享内存 ( shared memory ) 套接字 ( socket ) 这里分享一下我在学习进程通讯过程中笔记和心得 ---- 概要 ---- 消息队列 系统层面的消息队列是消息链接表...,存储在内核中,由消息队列标识符标识 一个消息可以看成一个记录,具有特定格式以及特定类别 对消息队列有写权限进程可以向消息队列中按照一定规则添加新消息;对消息队列有读权限进程则可以从消息队列中读走消息...消息队列提供了一种从一个进程向另一个进程发送一个数据块方法。每个数据块都被认为是有一个类型,接收者进程接收数据块可以有不同类型值。我们可以通过发送消息 来避免命名管道同步和阻塞问题。...对于每个消息队列,Linux 内核为标识符分配44B,为消息队列数据结构分配 96B。为了获得更多消息队列资源,可以动态增加 msgmni 取值。

99710

进程通讯(六).semaphore and shared(3)

*__shmaddr, int __shmflg) __THROW; 连接共享内存标识符为shmid共享内存,连接成功后把共享内存区对象映射到调用进程地址空间,随后可像本地空间一样访问 _...如果成功则返回附加好共享内存地址,如果出错,则返回-1,错误原因存于error中 Tip: fork后子进程继承已连接共享内存地址;exec后该子进程与已连接共享内存地址自动脱离(detach)...;进程结束后,已连接共享内存地址会自动脱离(detach) 有以下几种错误 EACCES:无权限以指定方式连接共享内存 EINVAL:无效参数shmid或shmaddr ENOMEM:核心内存不足...函数相反,是用来断开与共享内存附加点地址,禁止本进程访问此片共享内存 __shmaddr 连接共享内存起始地址 成功则返回0,出错则返回-1,错误原因存于error中 本函数调用并不删除所指定共享内存区...,而只是将先前用shmat函数连接(attach)好共享内存脱离(detach)目前进程 有以下几种错误 EINVAL:无效参数shmaddr ---- semctl sys/sem.h 中有关于

57110

进程通讯(六).semaphore and shared(2)

该参数可设置为 IPC_NOWAIT 或 SEM_UNDO 两种状态,IPC_NOWAIT 设置信号量操作不等待,一般使用 SEM_UNDO , 代表进程终止或崩溃后,这个操作会自动撤销,恢复到未操作之前样子...,是为了避免进程异常导致死锁或系统资源耗尽 ---- SEM_UNDO bits/sem.h 中有关于 SEM_UNDO 宏定义 /* Flags for `semop'. */ #define...SEM_UNDO 0x1000 /* undo the operation on exit */ SEM_UNDO 选项会让内核记录一个与调用进程相关UNDO记录,如果该进程崩溃...,则根据这个进程UNDO记录自动恢复相应信号量计数值 ---- shmget sys/shm.h 中有关于 shmget 原型声明 /* Get shared memory segment. *...__size 共享内存大小 __shmflg 当 shmflg&IPC_CREAT 为真时,如果内核中不存在键值与key相等共享内存,则新建一个共享内存;如果存在这样共享内存,返回此共享内存标识符

50410

Linux进程通信

进程通信有管道、信号、消息队列、信号量、共享内存、套接字等。 一、管道通信 管道通信方式分为无名管道和有名管道,无名通道可用于有亲缘关系进程通信,有名通道克服了管道没有名字限制。...2.只能由于父子进程或者兄弟进程之间 3.单独过程一种独立文件系统 4.数据读出和写入:一个进程向管道中写内容被管道另一端进程读出。...因此,主要作为进程以及同一进程内不同线程之间同步手段。...五、 共享内存(shared memory) 映射一段能被其他进程所访问内存,这段共享内存由一个进程创建,但多个进程都可以访问。...是最快IPC(进程通信)方式,是针对其他进程通信方式运行效率低而专门设计,往往与信号量配合使用,实现进程同步和通信。

2K30

linux进程进程通信_linux共享内存进程通信

内存共享最新整理: Linux进程通信-共享内存 – 码到城攻共享内存可以说是最有用进程通信方式,也是最快IPC形式 https://www.codecomeon.com/posts.../109/ 共享内存: 一、概念: 共享内存可以说是最有用进程通信方式,也是最快IPC形式。...两个不同进程A、B共享内存意思是,同一块物理内存被映射到进程A、B各自进程地址空间。 进程A可以即时看到进程B对共享内存中数据更新,反之亦然。...二、相关函数: 与信号量一样,在Linux中也提供了一组函数接口用于使用共享内存,而且使用共享共存接口还与信号量非常相似,而且比使用信号量接口来得简单。...,已经很好了,我也就不在班门弄斧了: Linux共享内存编程实例_分享美好专栏-CSDN博客_linux共享内存实例 赐教!

4.5K30

Linux进程通信

我们在Linux信号基础中已经说明,信号可以看作一种粗糙进程通信(IPC, interprocess communication)方式,用以向进程封闭内存空间传递信息。...为了让进程传递更多信息量,我们需要其他进程通信方式。这些进程通信方式可以分为两种: 管道(PIPE)机制。...在Linux文本流中,我们提到可以使用管道将一个进程输出和另一个进程输入连接起来,从而利用文件操作API来管理进程通信。...由于多进程任务具有并发性 (每个进程包含一个进程,多个进程的话就有多个线程),所以在共享资源时候也必须解决同步问题 (参考Linux多线程与同步)。...从原理上,管道利用fork机制建立(参考Linux进程基础和Linux从程序到进程),从而让两个进程可以连接到同一个PIPE上。

3.8K101
领券