新手编程叉过程子孙子孙子孙子

时间:2013-12-01 14:20:43

标签: process fork

使用fork进程疯狂。我通过以下工作流程进展很多,但仍然没有正确的结果。 这个想法是在孩子关闭后展示这个曾祖母的孩子。我认为问题在于我必须将i%6整合到i%2中,但我尝试过并没有更多的想法。

结果必须是:显示所有请求的孩子,然后显示孙子对,然后显示可被6整除的孙子孙子孙。 例如:孩子2,孙子20 =总共22。 然后总共中间体。

非常感谢。我对此绝望了。小时和小时。

致以最诚挚的问候,

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/time.h>
#include <unistd.h>

#include "rutines.h"


void show_help();

int main(int argc, char *argv[])
{
    int p,pid[100];
    int d=10;
    int e=100;
    int fills;
    int status;
    int sumador;
    char msg[MAXSTR];

    if (argc>1)
    fills=atoi(argv[1]);
    if (argc==1)
    {
        show_help("Error");
        exit(1);
    }


    // Creem N processos fill
    for(p=1;p<fills+1;p++)
    {
        status=0;       
        pid[p] = fork();
        if (pid[p]<0)
            error("Error");
        else
            if (pid[p]==0)
            {
            sprintf(msg, "CHILD process %d creat -> Ordre: %d Pare: %d.\n",getpid(),p,getppid());
                write_string(msg,"");

                /* Proces del fill */
                if (p%2 == 0)
                {
                    // Creant al net
                    pid[p] = fork();
                    if (pid[p]<0)
                        error("Error");
                    else

                        if (pid[p]==0)
                        {
                        sprintf(msg, "  GRANDCHILD process %d creat -> Ordre: %d Pare: %d.\n",getpid(),p*d,getppid());
                        write_string(msg,"");

                            if (p%6 == 0)
                            {
                            //Creant el besnet
                            pid[p] = fork();
                            if (pid[p]<0)
                                error("Error");
                            else

                            if (pid[p]==0)
                            {
                            sprintf(msg, "    GREAT-GRAND CHILD process %d creat -> Ordre: %d Pare: %d \n",getpid(),p*e,getppid());
                            write_string(msg,"");

                                exit(p*100); //Besnet finalitzat
                            }
                            else
                                wait(&status);  
                                exit(WEXITSTATUS(status)+p*10); //Net finalitzat
                            }
                            else                                
                                exit(p*10);

                        }
                        else
                        wait(&status);
                        exit(WEXITSTATUS(status)+p); 

                    }
                    else
                        exit(p);

                }
                else
                wait(&status);
                sprintf(msg, "CHILD process acabat %d -> %d \n\n",getpid(),WEXITSTATUS(status));
                write_string(msg,"");


    sumador=sumador+WEXITSTATUS(status);
    }



    sprintf(msg, "Proces principal pare %d -> Total return values: %d.\n",getpid(),sumador);
    write_string(msg,"");

    exit(EXIT_SUCCESS);
}


void show_help(char *err_message)
{
    write_string(err_message,"");
    write_string("Us de Pas1ok","");
}

0 个答案:

没有答案