Я хочу создать несколько процессов из одного главного процесса. Я знаю, что хочу использовать функцию из семейства 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()
?
Кроме того, я хотел бы общаться с каждым из этих процессов, поэтому я не хочу блокировать их во время работы этих процессов.
Вам нужно fork
в вашем главном процессе вызов в дочерних процессах execl
, (exec
Семейство функций заменяет ваш текущий образ процесса новым процессом, поэтому, следовательно, ваш цикл for никогда не завершается.)
призвание exec()
означает, что ваша текущая программа больше не существует. Возможно, вы захотите создать новый процесс, используя fork()
а затем позвоните exec()
в этом так, чтобы exec()
заменяет ваш новый процесс, и ваш основной процесс все еще работает так, как вы намереваетесь.
пример:
pid_t pid = fork();
if (pid == 0) {// child
execl();
} else { // parent
}