Création de plusieurs enfants d’un processus et maintenance d’un tableau partagé de tous leurs PID

J’ai bifurqué plusieurs fois et créé un ensemble de processus enfants en C. Je souhaite stocker tous leurs PID dans un tableau partagé. L’ordre des PID n’a pas d’importance. Par exemple, j’ai créé 32 processus. Je voudrais avoir un tableau long de 32 entiers qui stockerait chacun de leurs PID et est accessible à chacun de ces processus. Quelle pourrait être la meilleure façon de faire cela.

Voici un programme qui illustre ce que vous voulez utiliser avec mmap ():

 #include  #include  #include  #include  #include  #include  #include  #define MAX_PIDS 32 volatile pid_t *pids; // Called for each child process void do_child(void) { int c; printf("Child: %d - pid array: ", getpid()); for (c=0; c<10; c++) { printf("%d%s", pids[c], c==9?"\n":" "); } } int main(int argc, char **argv) { int c; pid_t pid; // Map space for shared array pids = mmap(0, MAX_PIDS*sizeof(pid_t), PROT_READ|PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0); if (!pids) { perror("mmap failed"); exit(1); } memset((void *)pids, 0, MAX_PIDS*sizeof(pid_t)); // Fork children for (c=0; c<10; c++) { pid = fork(); if (pid == 0) { // Child process do_child(); exit(0); } else if (pid < 0) { perror("fork failed"); } else { // Store in global array for children to see pids[c] = pid; sleep(1); } } exit(0); }