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