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

如何实现双进程互相保护

    来源: 互联网  发布时间:2015-12-24

    本文导语:  我需要在进程A中监测进程B是否存在,如果不存在则启动B,而在进程B中要监测进程A是否存在,不存在的话启动A,用过system(),fork()都不行,因为用system启动B时,该system系统调用是阻塞的,必须等到B进程退出后才返回,有谁有什...

我需要在进程A中监测进程B是否存在,如果不存在则启动B,而在进程B中要监测进程A是否存在,不存在的话启动A,用过system(),fork()都不行,因为用system启动B时,该system系统调用是阻塞的,必须等到B进程退出后才返回,有谁有什么好的意见.谢谢!

|
You can use two PIPEs to implement this, it is easier. one disadvantage is that you need an additional thread to start the other process if it ends. you can look at ProcA as ThreadA in process A, and ProcB as ThreadB is in process B in the following description:

1) ProcA open two pipes, pipeA[2], pipeB[2]
2) ProcA starts ProcB
3) ProcA closes pipeA[1] and pipeB[0], and ProcB closes pipeA[0] and pipeB[1]
4) ProcA reads pipeA[0], and ProcB reads pipeB[0]. with read(pipeA[0], buf, num);
5) ProcA and ProcB will be blocked, actually the threads will be blocked, because no data is in the pipe. if the read() returns, that means the process at the other end of the pipe ends. then the thread nees to restart the process. before this, close all file descriptors related to the pipeA/pipeB and then start from step 1.

i think this implementation is very simple, and sovle the problem of detecting whether the process exists or not. 

please refer to the figure 4.21 in "UNIX network programming Volume 2" for the details on how to handle PIPE and FIFO.

Regards

|
在单独的子进程中处理system

|
用vfork + exec试试

    
 
 

您可能感兴趣的文章:

  • 如果一个server进程要fork许多子进程,但不等待子进程终止,也不希望子进程结束后处于僵进程状态直到父进程终止。请问可采用什么方法实现
  • 如何实现子进程根据父进程的信号来确定是否终止子进程???
  • 我要实现当进程打开文件时,根据文件名判断是否符合要求,符合后处理文件,再把文件返回给进程,怎么实现啊
  • linux命令如何实现重启父进程而不会使其子进程退出
  • 如何实现这样的API,可同时被不同的进程/线程使用,但是又不区分进程/线程?
  • 请教急:shell怎么实现进程监控,重启进程
  • 请教如何编程实现父进程产生多个子进程
  • 在linux,如何用共享内存来实现进程间的通讯?(这些进程没有父子关系)
  • help help busy!!! 请问如何让一个进程进入dead状态或者编程实现让一个进程进入dead状态
  • liunx中如何用C实现检测某个进程时候存在,如不存在,启动该进程。。。。。。。。
  • 守护进程接收信号杀死或重启子进程 如何实现?
  • 如何实现管道和后台进程
  • 怎么实现这个类?(进程间通信)
  • 单个消息队列能实现进程间聊天功能吗?
  • 进程同步,用进程+SYS V信号量实现如下前趋图
  • 怎么实现父进程不管被Kill掉还是自己错误而退出,子进程都不会受影响而被终止
  • 进程间通信:pthread_cond使用在线程间,我要进程间条件同步(没有情缘关系的进程),采用什么方呢?也就是说我要在UNIX实现WIN32上命名Event的功能
  • linux下怎样实现进程间的通讯,急用啊 !!!!!!!!!!!
  • unix的进程pooling是如何实现的
  • 多个进程对系统V共享内存进行读写,怎样实现对共享内存部分进行加解锁?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 通过javascript实现DIV居中,兼容各浏览器版本
  • socket实现多文件并发传输,求助多线程实现问题?
  • Python GUI编程:tkinter实现一个窗口并居中代码
  • interface 到底有什么用???实现接口,怎么实现??
  • 通过javascript库JQuery实现页面跳转功能代码
  • 怎么用Jsp实现在页面实现树型结构?
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • windows 下的PortTunnel 在linux下怎么实现?或者相应的已经实现的软件?端口映射
  • php实现socket实现客户端和服务端数据通信源代码
  • 网站重定向用C语言实现iptables,ACL实现
  • flash AS3反射实现(describeType和getDefinitionByName)
  • 在linux下如何编程实现nslookup命令实现的IP地址和域名互相转换的功能?
  • boost unordered_map和std::list相结合的实现LRU算法
  • 求在freebsd+Squid下实现pc上网的透明代理的实现方法!给出具体配置方法的高分谢!
  • c#通过委托delegate与Dictionary实现action选择器代码举例
  • linux下如实现与window下的驱动器实现文件共享??
  • 使用java jdk中的LinkedHashMap实现简单的LRU算法
  • qt如何实现:操作键盘实现数据的滚动?
  • iphone cocos2d 精灵的动画效果(图片,纹理,帧)CCAnimation实现
  • 我想用APPLET实现读取客户端的图片文件,该如何实现?
  • c语言判断某一年是否为闰年的各种实现程序代码
  • PING是用TCP,还是用UDP来实现的?或是采用其它协议实现的?


  • 站内导航:


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

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

    浙ICP备11055608号-3