创建进程的多个子进程并维护其所有PID的共享数组

我已经分叉了几次并在C中创建了一堆子进程。我想将它们的所有PID存储在共享数组中。 PID的排序无关紧要。 例如,我创建了32个进程。 我希望有一个32整数长数组,它可以存储每个PID,并且每个进程都可以访问它们。 什么是最好的方法来做到这一点。

这是一个用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); }