我已经为此苦苦挣扎了一段时间,我放弃了,所以我寻求帮助。

我需要编写一个程序,该程序永久等待SIGINT(Ctrl + C),并且在接收到该文件时,上一代进程将创建X个子进程。您可能会说这是一棵“ Xary”树(如果我以某种方式错了,请纠正我)。

所以:

收到一次SIGINT时:

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


当收到两次:

$ 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);
        }
    }
}


在此先感谢您,感谢您在英语方面的任何错误,以西班牙语为母语。

最佳答案

这就是我想要的:

int reproducir(void)
{
if (spawn == 0){
for (i=0;i < X;i++)
        {
                    spawn = fork();
                    if(spawn == 0) {
                      break;
                    }
        }
    }
    return 0;
}

关于c - 在C语言中收到SIGINT时,使用fork()在进程树中创建X个子级,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19085462/

10-13 04:10