我想从一个主进程创建多个进程。我知道我想使用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()
生成多个流程?
另外,我想与每个进程进行通信,因此我不想在这些进程运行时阻塞。
答案 0 :(得分:2)
您需要在主进程中fork
,在您的子进程中调用execl
。 (exec
系列函数用新进程替换当前进程映像,因此for循环永远不会完成。)
答案 1 :(得分:1)
调用exec()
表示您当前的程序不再存在。您可能希望使用fork()
创建一个新流程,然后在其中调用exec()
,以便exec()
替换您的新流程,并且您的主流程仍可按预期运行。
示例:
pid_t pid = fork();
if (pid == 0) {// child
execl();
} else { // parent
}