Обработчик ошибок в MPI
Я пытаюсь создать простой обработчик ошибок в MPI, выводящий что-то на экран, если процесс умирает во время работы.
Вот мой код:
#include <mpi.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
static void verbose_errhandler(MPI_Comm *pcomm, int* perr, ...) {
MPI_Comm comm = *pcomm;
int err = *perr;
int i, rank, size, nf, len, eclass;
char err_str[MPI_MAX_ERROR_STRING];
MPI_Error_class(err, &eclass);
MPI_Comm_size(comm, &size);
MPI_Comm_rank(comm, &rank);
MPI_Error_string(*perr, err_str, &len);
printf("JFOJFSOJFDJFDOJFDOJFDDFOJ%d\n", rank);
}
int main(void) {
MPI_Errhandler errh;
MPI_Init(NULL, NULL);
MPI_Comm_create_errhandler(verbose_errhandler, &errh);
MPI_Comm_set_errhandler(MPI_COMM_WORLD, errh);
int rank;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Barrier(MPI_COMM_WORLD);
if (rank == 1) {
raise(SIGKILL);
}
MPI_Barrier(MPI_COMM_WORLD);
MPI_Finalize();
}
Но когда я создаю и меняю errhandler при помощи команд MPI_Comm_create_errhandler и MPI_Comm_set_errhandler, при вызове SIGKILL на процессе 1 мой обработчик ошибок не вызывается. В чем тут может быть проблема? Буду благодарен.