2012-10-26 105 views
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()产生多个进程吗?

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

+1

哪里'fork'打电话?你需要调用它,如果它表明你是子进程,那么你执行'exec'。父母继续跑步和分娩孩子。孩子们都会用自己想要运行的程序取代自己。 – paddy

回答

2

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

+0

如果我岔开主人,是不是所有的孩子都会读这个文件呢? – nook

+0

我不知道你的readFile是做什么的,但是如果它只是读取文件然后关闭它并返回结果,那么如果你在之后(在你的execl之前)fork,那么它不会重新读取文件,执行从你分叉点开始。您的孩子将拥有父母所做的一切副本,至少在调用execl之前(然后所有内容都被替换)。 – hexist

+1

您是对的。谢谢。接受你,因为你是第一个。非常感谢。 – nook

1

调用exec()意味着您的当前程序不再存在。您可能需要使用fork()创建一个新进程,然后在其中调用exec(),以便exec()取代您的新进程,并且您的主进程仍然按照您的要求运行。

例如:

pid_t pid = fork(); 
if (pid == 0) {// child 
    execl(); 
} else { // parent 
}