管理多过程以在C中从事相同的工作



i编写了某些过程使用数组,对其进行排序然后打印的代码。实际上,我想做的是,每个过程都应对主要进程给出的整数数字排列并打印它们,然后将它们发送回主过程。该算法在没有过程和分叉的情况下工作正常。但是,当我添加分叉时,某些过程会导致打印或执行某些指令多次以上或更长时间。请让我知道如何管理它。

这是代码:

 if (N<=NumberOfLines)
    {
        PortionOfProcess=NumberOfLines/N;
        for (int i=0;i<N;i++)//making N process using fork
        {
            for (int j=0; j<PortionOfProcess; j++)//For using from function by a single process
            {
                int pointer=i*PortionOfProcess+j;//this points to the line for each process
                printf("poniter: %d . the i is %d, the j is: %d and the portionprocess is : %dn",pointer,i,j,PortionOfProcess);
                fileopener(B_result,pointer);

                mypid=fork();
                if (mypid==0)//child
                {
                    ///////////do the sorting
                    for (int j=0 ; j<(y-1) ; j++)
                    {
                        for (int i=0 ; i<(y-1) ; i++)
                        {
                            if (B_result[i+1] < B_result[i])
                            {
                                t = B_result[i];
                                B_result[i] = B_result[i + 1];
                                B_result[i + 1] = t;
                            }
                        }
                    }
                    for (int j=0 ; j<y ; j++)
                    {
                        printf("SORTED %d n",B_result[j]);
                    }
                //////////////////end sorting
                }
            }
        }
    }

我是C编程的新手。我编写了某些过程使用数组,对其进行排序然后打印的代码。该算法在OUT过程和分叉

方面正常工作

这是fork()所做的:它创建了整个过程的新副本,在大多数方面,它完全独立于原始过程。但是,原始的父母过程不等待孩子们完成。它也没有与孩子交流的任何方式。

您想做的实际上很复杂。父母和子过程需要创建某种交流渠道。这通常是通过在它们之间创建管道来完成的。然后,孩子将像普通文件一样写入管道,父母将从管道上读取。逻辑看起来像这样:

create pipe
fork
if parent close write end of the pipe
if child close read end of pipe

孩子们然后做他们的事情并正常退出。但是,父母有大量文件要读,它不知道要阅读哪个文件。您可能还想查看Select,以便您以准备好的顺序阅读结果。

最后,您需要致电等待或等待,以便您获得每个孩子的返回状态,并且您最终不会出现僵尸进程,这是可能的,因为随着父母从各种管道上封锁输入,您犯的任何错误可能导致它永远等待(或直到被杀)。

相关内容

  • 没有找到相关文章

最新更新