Я использую boost :: mpi, OpenMPI. boost :: mpi :: communator :: recv (блокирующая версия) не прерывается сигналами Linux. Как можно правильно завершить мою программу с помощью сигнала SIGTERM?
Проблема была решена:
1. Все узлы, кроме главного, игнорируют сигналы.
2. Главный узел игнорирует сигналы, кроме одного потока (этот поток вызывает функцию паузы POSIX). Когда пауза прервана, сообщения об остановке mpi отправляются всем узлам.
Таким образом, все узлы прекращают свою работу.