J'écris un programme qui crée deux processus directement à partir du parent. Mon résultat attendu ressembleC Création d'un processus enfant
Main programs process ID: 2834
Child 2 (ID: 2836) Start Sequence at: 23
Child 1 (ID: 2835) Start Sequence at: 20
Ma sortie réelle est
Main programs process ID: 2834
Child 2 (ID: 2834) Start Sequence at: 23
Child 1 (ID: 2835) Start Sequence at: 20
Mon code est
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(int argc, char *argv[])
{
pid_t pid;
int n;
if (argc == 1) {
fprintf(stderr,"Usage: ./a.out <starting value>\n");
return -1;
}
n = atoi(argv[1]);
int p_pid;
p_pid = getpid();
printf("Main programs process ID: %d\n", p_pid);
pid = fork();
if(pid == 0){
int c1;
c1 = getpid();
printf("Child 1 (ID: %d) Start Sequence at: %d\n", c1, n);
}
if(pid != 0){
int c2;
c2 = getpid();
printf("Child 2 (ID: %d) Start Sequence at: %d\n", c2, n+3);
}
return 0;
}
Je reçois le processus enfant 1 correct, mais pas le processus enfant 2 correct. Qu'est-ce que je fais de mal ou comment puis-je résoudre ce problème?
Le code n'a qu'un seul appel à 'fork()' pour qu'un seul enfant soit créé. – user3629249
NOTE: la fonction: 'fork()' a trois (3) types de valeurs de retour. Le code affiché vérifie uniquement le retour '== 0' et suppose qu'aucune erreur ne s'est produite. C'est une très mauvaise pratique de programmation de ne pas vérifier les erreurs. – user3629249
le processus principal (le parent) ne devrait pas retourner jusqu'à ce que tous les enfants aient quitté. Par conséquent, le parent doit appeler 'wait()' ou mieux 'waitpid()' pour chaque enfant avant la sortie du parent. – user3629249