当前位置:  技术问答>linux和unix

linux下两进程通信的问题

    来源: 互联网  发布时间:2016-05-05

    本文导语:  最近在看一些进程通信的原理,程序中要考虑到两个进程之间的通信,具体方案如下: 进程A:为网络服务端程序,负责接收从客户端发送的数据 进程B:特定地执行一个功能,当进程A每次接收完数据后,通知进...

最近在看一些进程通信的原理,程序中要考虑到两个进程之间的通信,具体方案如下:
进程A:为网络服务端程序,负责接收从客户端发送的数据
进程B:特定地执行一个功能,当进程A每次接收完数据后,通知进程B做相应处理,进程B根据A的给的结果后,继续执行原特定功能

这里面涉及到了两个进程之间的通信,看了以下进程间共享内存的方法,但是还是没有什么思路,高手门能不能赐教下,怎样来设计这两个
进程间的通信,用什么方法,谢谢!!!

|
可以有很多方法实现进程间通信,比如:消息队列,共享内存,管道,FIFO,socket等,但具体使用什么方式要根据具体需要而定,因为这些方式都有各自的优势和局限:
使用消息队列能够实现一对多且具有优先级的通信交互,且具有很好的异步性,这使的程序架构的耦合度很低,但消息队列是内核链表没有引用计数,必须小心的处理进程异常时的残留队列的清除问题(但这通常来说不是问题),另外消息队列只能在本机之内通信,且不能使用select、poll、epoll接口等;
共享内存必须使用某种同步机制,如:信号量或文件锁等,使用它进行消息传输的话,你需要处理有界缓冲区及生产者、消费者等问题,这使你的程序变得复杂且传输的消息大小有限制,所以共享内存更适合用于数据的共享(如:某个数据结构或数据表的内容等),而不适合数据的传输;
管道/FIFO更适合哪些有亲缘关系的进程间通信,除非使用命名管道,其传输的消息大小有限制,超过限制的大消息则可能出现交叉的情况,但管道可以使用多路转接等接口;
SOCKET方式最大的好处是你的程序可以统一的处理本地消息和网络消息,但处理本地消息效率不如IPC机制高。
线程方式表面看来使处理简单了,但其实它使你的应用程序变得复杂而不稳定,尤其是程序有一定规模的时候,因此能不用线程就不用线程,尽量采用多进程方式处理。
因此:如果你的系统整体架构是采用多进程方式的话,你应该使用消息队列方式;如果你的程序是面向网络应用的,如:WEB应用,则建议采用SOCKET方式。

|
如果只有这两个进程的话,实现你说的功能最简单的方法就是用消息队列了。

|
建立一个有名管道,A-B通过该管道通讯,B进程用select查询

|
系统提供的进程通信够多的了

命名pipe 共享内存 消息 

不过偶推荐 unix domain socket 很不错的说 试试哈 

|
进程A:为网络服务端程序,负责接收从客户端发送的数据 
进程B:特定地执行一个功能,当进程A每次接收完数据后,通知进程B做相应处理,进程B根据A的给的结果后,继续执行原特定功能 
楼主,你的需求其实2个线程就ok了,没必要多进程吧.一般的socket server,一个线程a就搞定了哦.然后B作为主线程,线程间的同步,数据共享也方便得多.

|
进程间通信的手段很多:管道、命名管道、socket、信号、共享内存、消息队列等等。
这么多方法你随便选,看你自己的程序适合用那种了。
使用都不复杂,不熟悉的话google一下。

|
个人觉得 socket比较简单,去 google找下  应该有很多这样的 例子

|
本人补充几个命令,如PS PSTREE NICE RENICE 等

|
需求提得不够详细,这也正是大家给了这么多选择的原因。
甚至我可以说,fork一个进程,或者pthread_create建个线程,都可以做。

所以,能说说,为什么是需要两个进程?还有什么其他的限制条件?

|
可以用线程来实现比较方便,加上互斥锁和信号量。

|
mark

    
 
 

您可能感兴趣的文章:

  • linux僵尸(zombie)进程介绍及清除
  • 高手请教!linux怎样通过pid获取进程信息,如:进程名、进程状态等?
  • linux下进程占用内存空间详解
  • linux命令如何实现重启父进程而不会使其子进程退出
  • Linux进程的内核栈和用户栈概念,相互关系及切换过程
  • Linux中最多同时可以开多少个进程,一个进程可以开多少个线程?
  • linux下进程间通信:共享内存原理及具体用法举例(基于c/c++语言)
  • Linux守护进程 的子进程 终端处理
  • Linux内核进程与应用进程的通信方式有哪些?
  • 在linux,如何用共享内存来实现进程间的通讯?(这些进程没有父子关系)
  • linux下system函数调用shell命令后,怎样让主进程不等子进程返回,接着执行(在线)?
  • linux进程(线程)运行过程中如何获取本进程当前的内存使用状况,统计信息?
  • 如何linux下监控进程及其子进程占用资源?
  • linux下的进程如何访问另外一个进程建立的mutex?
  • linux中用killall命令杀死进程的时候会释放掉该进程所占有的内存吗?
  • 如何linux下监控进程及其子进程占用资源? iis7站长之家
  • 请教:在Linux下怎么样检测一个进程是否是僵尸进程??
  • 请问linux进程的哪些信息保存在内核里?哪些信息又保存在进程空间里?谢谢
  • Linux下请教一个父进程杀死子进程的问题.
  • 怎么查看Linux中所运行的进程,并且知道哪些是停止响应的,用什么命令可以杀掉停止响应的进程?
  • 【求助】linux/Unix下创建子进程,向父进程发送信号,子进程也能收到改信号,此时如何让子进程不收到信号
  • SSL握手通信详解及linux下c/c++ SSL Socket代码举例
  • 想设计几个简单的通信程序,在linux环境下编译通信,怎么实现?
  • linux驱动程序是怎样通过内核和应用程序通信,还有是怎样和硬件通信,跪求求解,谢谢高手留言。
  • 嵌入式linux下线程通信可以用共享文件法吗?
  • linux与Windows socket通信,乱码
  • Linux上SERVER 和vc上CLIENT的通信connect失败!
  • linux如何和hid类设备通信
  • linux进程异步通信,高手请进
  • Linux网络编程(怎样实现两个客户端之间的通信)
  • linux 与windows 间socket通信问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux下时钟同步问题:Clock skew detected原因分析及解决方法
  • linux 繁体 汉字输入法 问题 linux 繁体 汉字输入法 问题
  • Linux 下c++开发error while loading shared libraries问题解决
  • 先安装linux,后安装winxp,能否解决正常启动linux的问题不?(初学者问题,很容易回答)
  • 弱弱的一问,linux下的中文问题及网络问题,分不是问题
  • Linux新手问,Linux安装问题。
  • linux下游戏问题。(菜鸟问题)
  • 初学Linux,发现Linux下的版本问题很头痛。【系列问题】
  • 高深问题:有了linux内核源代码如何做成一个linux操作系统
  • 一个很菜的问题,关ARM与linux内核裁剪的问题!
  • vmware装的linux,通过win2000访问linux的web服务器有问题
  • 初次接触linux,关于linux 用户权限问题请教!
  • Linux下是否存在磁盘碎片问题和内存碎片问题?
  • linux开发的应用程序部署到其他linux的问题
  • vmware上装LINUX的问题,WIN7可以拼的通linux的IP,linux拼不通win7的IP
  • Linux互ping在局域网内大量丢包,但是linux和windows互ping就没问题。
  • 最菜的问题—关于linux“动态库”的问题
  • linux下挂载linux分区的问题
  • 一个小问题。Linux下编程语言的问题。
  • linux问题 secureCRT连接的问题 在线等急!~~
  • Linux下环境变量问题以及FLEX安装问题
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3