Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multiple child process

can someone help me about how to create multiple child processes which have the same parent in order to do "some" part of particular job?

for example, an external sorting algorithm which is applied with child processes; each child process sorts a part of data and finally the parent merges them..

EDIT: Maybe I should mention the forking multiple child processes with loop..

like image 766
israkir Avatar asked May 18 '09 07:05

israkir


2 Answers

Here is how to fork 10 children and wait for them to finish:

pid_t pids[10];
int i;
int n = 10;

/* Start children. */
for (i = 0; i < n; ++i) {
  if ((pids[i] = fork()) < 0) {
    perror("fork");
    abort();
  } else if (pids[i] == 0) {
    DoWorkInChild();
    exit(0);
  }
}

/* Wait for children to exit. */
int status;
pid_t pid;
while (n > 0) {
  pid = wait(&status);
  printf("Child with PID %ld exited with status 0x%x.\n", (long)pid, status);
  --n;  // TODO(pts): Remove pid from the pids array.
}
like image 125
pts Avatar answered Sep 30 '22 15:09

pts


I think it would be worth pointing out why threads are more appropriate here:

As you are trying to do a "part" of the job in parallel i assume that your program needs to know about the result of the computation. fork()s of a process don't share more then the initial information after fork(). Every change in one process is unknow to the other and you would need to pass the information as a message (e.g. through a pipe, see "man pipe"). Threads in a process share the same adress space and therefor are able to manipulate data and have them visible toeach other "immediatly". Also adding the benefits of being more lightweight, I'd go with pthreads().

After all: You will learn all you need to know about fork() if you use pthreads anyway.

like image 39
pmr Avatar answered Sep 30 '22 16:09

pmr