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
> [email protected]
> http://www.open-mpi.org/mailman/listinfo.cgi/devel