J'appelle fork() deux fois pour créer deux processus enfants. Je veux que le processus fils A fasse un appel à exec() et que le processus fils B fasse aussi un appel à exec(). Le problème que j'ai avec le code donné est qu'après le premier exec() du processus fils A, le prochain fork() ne semble pas se produire et le programme se termine. Je pense que cela a à voir avec la façon dont exec() recouvre le processus parent. Ce que je veux accomplir est d'appeler exec() de chacun des processus enfants créés par fork().fork() et exec() Deux processus enfants
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <unistd.h>
#include <iostream>
int main() {
pid_t cpid_a, cpid_b;
cpid_a = fork();
if(cpid_a < 0) {
std::cout << "Fork failed." << '\n';
return 1;
}
else if(cpid_a == 0) { // code for child process A
execlp("/bin/ls", "ls", NULL);
cpid_b = fork();
if(cpid_b < 0) {
std::cout << "Fork failed." << '\n';
return 1;
}
else if(cpid_b == 0) { // code for child process B
execlp("/bin/ls", "ls", NULL);
}
}
else { // code for parent process
while(wait(NULL) != -1);
}
return 0;
}
Si 'execlp' renvoie, c'est seulement parce qu'il a échoué. Vous ne devriez jamais avoir de code après un appel à execl qui fait quoi que ce soit sauf gérer une erreur. –
IOW, votre enfant devrait appeler execl, et le parent devrait appeler 'fork' une seconde fois. –