そのため、fork()を数回繰り返して、子プロセスを作成する必要があります。子プロセスは、たとえば「ほとんど処理しないか、処理しない」ことになっています。
while(1)
sleep(1)
次に、親は子のPIDを収集し、それらを殺すことになっています(厳しい、私は知っています!)。
しかし、彼らは私がその瞬間にそれをしているように、「親」ブロックのコードを数回実行しますが、私はそれを一度だけ実行する必要があります。
これが例です。pidをテーブル(ここではp [])に格納する必要があります。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#define NSUB 10
int main ()
{
int i, n = NSUB, p[NSUB], q;
for (i = 0; i < n; i++) {
printf ("Creating subprocess %d ...\n", i);
p[i] = fork();
if (p[i] < 0) { perror ("fork"); exit (1); }
if (p[i] == 0) { /* subprocess */
printf ("Subprocess %d : PID %d\n", i, (int) getpid());
while (1) pause ();
exit (0);
}
}
sleep(2);
for (i = 0; i < n; i++) {
printf ("Killing subprocess %d ...\n", i);
if (kill (p[i], SIGTERM) < 0) perror ("kill");
}
for (i = 0; i < n; i++) {
printf ("waiting for a subprocess ...\n");
q = wait (NULL);
printf ("Subprocess terminated: PID %d\n", q);
}
exit (0);
}