0

我想从一个主进程创建多个进程。我知道我想使用 exec 系列中的一个函数,但它似乎并没有按照我的预期进行。似乎 exec() 是一个阻塞调用,或者我只是用错了。无论如何,上代码:

const char* ROUTERLOCATION = "../../router";
int main(int argc, char** argv) {
  manager manager;
  vector<string> instructions = manager.readFile(argv[1]);
  ...
  //file gives me the number of proceses i want to spawn and that value goes in 
  //rCount
  for(int i = 0; i < rCount; i++){
    cout << "creating:" << i << endl;
    execl(ROUTERLOCATION, "",NULL);
    }
}

我看到的输出是:

creating:0
HI!!!

然后一切都优雅地退出。我不能使用 生成多个进程execl()吗?

另外,我想与这些进程中的每一个进行通信,所以我不想在这些进程运行时被阻塞。

4

2 回答 2

2

您需要fork在您的主进程中,在您的子进程中调用execl. (exec函数系列用您的新进程替换您当前的进程映像,因此为什么您的 for 循环永远不会完成。)

于 2012-10-26T02:52:38.333 回答
1

调用exec()意味着您当前的程序不再存在。您可能希望使用创建一个新流程fork(),然后调用exec()它,以便exec()替换您的新流程,并且您的主流程仍然按您的预期工作。

例子:

pid_t pid = fork();
if (pid == 0) {// child
    execl();
} else { // parent
}
于 2012-10-26T03:04:41.447 回答