Processus enfant et parent avec fork ()

J’ai des problèmes, je dois créer un programme qui crée 9 processus enfants, après quoi, je dois mettre un compte à rebours de 3 secondes et faire en sorte que ces 9 processus attendent un signal du père, après réception de ce signal, tous les les enfants doivent dire de quel enfant il est (s’il est l’enfant n ° 1, n ° 2, n ° 3, etc …, dans l’ordre dans lequel ils ont été faits).

Ce que j’ai fait est ici, tout va bien, je pense, jusqu’au moment où je dois dire en tant qu’enfant, quel est mon chiffre, je ne sais pas comment le faire, car chaque enfant est différent processus, ils ne partagent pas de mémoire et le signal ne peut pas utiliser d’arguments pour cela, j’imprime maintenant le PID sur la fonction appelée “gestionnaire”, mais comment puis-je imprimer mon numéro, en tant qu’enfant ?.

#include  #include  #include  #include  #include  #include  void handler(int x); int main() { pid_t child[9]; pid_t child_pid; for (int i = 0; i < 9; ++i) { child_pid = fork(); child[i] = child_pid; if (child_pid == 0) break; if (child_pid < 0) { perror("fork()"); exit(EXIT_FAILURE); } } if (child_pid == 0) { signal(SIGUSR1, handler); pause(); } else { printf("Countdown:\n"); sleep(1); printf("3\n"); sleep(1); printf("2\n"); sleep(1); printf("1\n"); sleep(1); for (int i = 0; i < 9; i++) kill(child[i], SIGUSR1); waitpid(-1, NULL, 0); } return 0; } void handler(int sig) { printf("This is Child #%d\n", getpid()); exit(0); } 

Créer une variable globale:

 int my_number; 

Ensuite, dans votre boucle qui crée les enfants, faites:

  if (child_pid == 0) { my_number = i; break; } 

Ensuite, vous pouvez utiliser la variable dans le gestionnaire:

 void handler(int sig) { printf("This is Child #%d\n", my_number); exit(0); }