2

ループ内に複数の子プロセスを作成しています。各子供はそれを行い、誰が最初に終了してもかまいません。(関連性があるかどうかはわかりませんが、各子には孫もいます)

子プロセスが終了し、終了したときに他のプロセスを停止するのを待つにはどうすればよいですか?

for(i=0; i<numberOfChildren; i++)
{
    pid = fork();
    if(pid < 0)
    {
        fprintf(stderr, "Error: fork Failed\n");
        return EXIT_FAILURE;
    }
    /* Child Process */
    if(pid == 0)
    {
        /* Do your thing */
    }
    /* Parent process */
    else
    {
        childrenPid[i]=pid;
    }
}
4

1 に答える 1

3

wait子の 1 つが呼び出しで終了しkill、残りの子が終了するまで、親を一時停止できます。

#include <sys/types.h>
#include <wait.h>

int status;
childpid = wait(&status)

次に、作成したすべての子のプロセス ID を配列に保存したら、残りの子を kill できます。

#include <sys/types.h>
#include <signal.h>

for(i = 0; i < nchildren; i++)
    if (children[i] != childpid)
        kill(children[i],SIGKILL)

ここnchildrenで、 は作成された子の数の整数カウントであり、 は作成childrenされた子の pid_t の配列です。

于 2014-10-01T19:47:42.340 に答える