0

そのため、fork()を数回繰り返して、子プロセスを作成する必要があります。子プロセスは、たとえば「ほとんど処理しないか、処理しない」ことになっています。

while(1)
 sleep(1)

次に、親は子のPIDを収集し、それらを殺すことになっています(厳しい、私は知っています!)。

しかし、彼らは私がその瞬間にそれをしているように、「親」ブロックのコードを数回実行しますが、私はそれを一度だけ実行する必要があります。

4

1 に答える 1

1

これが例です。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);
}
于 2013-02-28T17:00:54.600 に答える