0

私はしばらくこれに苦労しており、あきらめたので、助けを求めています。

SIGINT (Ctrl + C) を永続的に待機するプログラムを作成する必要があり、受信すると、最後の世代のプロセスが X の子を作成します。あなたはそれが「Xary」ツリーだと言うでしょう (私が何か間違っていたら、私を訂正してください)。

そう:

SIGINT を 1 回受信した場合:

$ pstree -p 6227
example(6227) example(6229)
              example(6230)

2回受信した場合:

$ pstree -p 6227
             example(6229) example(6235)
                           example(6236)
tarea2(6227)
             example(6230) example(6234)
                           example(6237)

等々...

これまでのところ、SIGINT をキャッチすることはできますが、何度も失敗したため、ツリーの作成方法については何もわかりません。

だから、これは私のコードです:(未使用のインクルードは無視してください)

#include <stdio.h> /* libreria estandar */
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h> 
#include <sys/types.h>
#include <sys/wait.h>

#define X 2

void reproducir(int signum)
{
 if (signum == SIGINT)
        switch(signum)
    {
        case SIGINT:
            /*SOMETHING I'VE BEEN TRYING TO FIGURE OUT*/
    }
        }
int main(void)
{
                printf("PID: %d\n", getpid()); 

    while (1)
    { 
        if (signal(SIGINT, reproducir) == SIG_ERR) 
        {
            perror("error\n");
            exit(EXIT_FAILURE);
        }
    } 
}

事前に感謝します。文法の間違いについては申し訳ありません。スペイン語のネイティブ スピーカーです。

4

1 に答える 1

0

これは私が探していたものです:

int reproducir(void)
{
if (spawn == 0){
for (i=0;i < X;i++)
        {
                    spawn = fork();
                    if(spawn == 0) {
                      break;
                    }
        }
    }
    return 0;
}
于 2013-10-01T02:49:56.860 に答える