That is the expected behavior designed into Open MPI. If any process calls 
MPI_Init and then terminates without calling MPI_Finalize, we flag that as an 
abnormal termination and abort the entire job.

We don't provide any option for avoiding that behavior.

On Dec 17, 2010, at 5:13 AM, Suraj Prabhakaran wrote:

> Hello,
> 
> I am observing a behavior where when the parent spawns a child and when the 
> child terminates abruptly (for example with exit() before MPI_Finalize() ), 
> the parent also terminates even after both the child and parent have 
> explicitly called a MPI_disconnect. This turns out to be a disadvantage.  A 
> sample program is as follows:
> 
> Parent:
> 
> int main (int argc, char *argv[])
> {
>   MPI_Init(&argc, &argv);
>   MPI_Errhandler_set(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
>   MPI_Comm child_comm;
>   MPI_Comm_spawn("./child", MPI_ARGV_NULL, 1, MPI_INFO_NULL, 0, 
> MPI_COMM_SELF, &child_comm,    MPI_ERRCODES_IGNORE);
>   printf("spawned a child\n");
>   MPI_Comm_disconnect(&child_comm);
>   printf("Disconnected from the child\n");
>   sleep(5000);
>   MPI_Finalize();
>   return 0;
> }
> 
> Child:
> 
> int main (int argc, char *argv[])
> {
>   MPI_Init(&argc, &argv);
>   MPI_Comm parent, parent1;
>   MPI_Comm_get_parent(&parent);
>   MPI_Comm_disconnect(&parent);
>   if(parent == MPI_COMM_NULL)
>   printf("Child: Disconnected from the parent, Exiting\n\n");
> 
>   MPI_Comm_get_parent(&parent1);
> 
>   if(parent1 != MPI_COMM_NULL)
>   printf("Child: yes, i got my parent again\n");
> 
>   exit(1); //abrupt end
> 
>   MPI_Finalize();
>   return 0;
> }
> 
> In the above simple example, the second printf will not be displayed clearly 
> indicating that the child is really disconnected from the parent. However, at 
> exit() of the child, the parent terminates too. Perhaps there is a way to 
> avoid this kind of auto cleanup?
> 
> Thanks,
> Suraj Prabhakaran
> _______________________________________________
> devel mailing list
> de...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/devel


Reply via email to