使用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","");
}