Обработчик ошибок в 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 мой обработчик ошибок не вызывается. В чем тут может быть проблема? Буду благодарен.


Ответы (0 шт):