繁体   English   中英

异步C ++进程间控制

[英]asynchronous c++ inter-process control

我在Ubuntu 12.04 LTS上使用c ++编写此代码,但我明确不使用任何BOOST库。 我想做的是有一个父进程,两个或多个子进程同时运行。

父进程的行为类似于事件侦听器和任务调度程序。 孩子们完成父母告诉他们的任务; 这些任务是系统调用,父级不在乎何时完成。

到目前为止,我成功完成的工作是

  • 父母会分叉()一些孩子并保留他们的小费
  • 在通过fork()和pause()将子级立即暂停(S)
  • 父级恢复(R)并以标准事件循环方式检测事件

接下来,我需要知道的是如何继续生孩子并在孩子仍在跑步的情况下返回父母。

因此,我的问题是,父母和孩子可以同时安全地同时跑步吗? (父母不在意孩子恢复出生后在做什么)

一般而言,要在pause()之后恢复子进程该怎么办?

下面是派生孩子的构造函数

childManager(int number_of_children, pid_t parent) {
    int i=0;

    while(number_of_children--) {
        if(parent == getpid())
        {   
            this->parent = parent;
            children.push_back({++i,_IDLE,fork()});
            if(parent != getpid()) pause();
        }
    }
}

我在这里看到的唯一问题是

一般而言,要在pause()之后恢复子进程该怎么办?

向其发送信号,其作用是执行信号捕获功能或终止该过程。 例如:

kill(children[i], SIGUSR);

也就是说,这不是一种理想的方法。 您也可以很轻松地让孩子在管道上阻塞,等待父母告诉他们做某事。 或大约30个不涉及信号的类似事物。

要回答您的特定问题:

因此,我的问题是,父母和孩子可以同时安全地同时跑步吗? (父母不在意孩子恢复出生后在做什么)

子进程退出后,父进程将必须调用waitwaitpid来收获子进程。 如果不这样做,您将面临僵尸进程。 您可以在父进程的事件循环内以非阻塞方式进行此操作。

一般而言,要在pause()之后恢复子进程该怎么办?

您必须向子进程发送信号。 您可以通过在父进程中调用kill来做到这一点。 您将需要在子进程中安装信号处理程序以捕获信号-为此使用sigaction

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM