Мне нужно написать программу MPI, которая должна запускать несколько процессов на разных узлах кластера. Это мой пример кода.Как прервать программу MPI, которая разветвила другие процессы
#include <stdio.h>
#include <mpi.h>
int main(int argc, char *argv[]) {
int rank, size, nodenamesize;
char nodename[100];
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Get_processor_name(nodename, &nodenamesize);
printf("Hello world! I am %d of %d running on %s\n", rank, size, nodename);
if (rank == 0) {
system("./Longwait&");
} else if (rank == 1) {
system("./AnotherLongWait&");
}
MPI_Finalize();
return 0;
}
Он успешно запускает процессы, но приложение MPI не завершается. Он ждет даже после вызова MPI_Finalize() ;.
с каким кодом? Что мне нужно сделать, чтобы программа MPI должна была запускать некоторые другие приложения, но ничего не ждать.
Спасибо, С уважением, Robo.
Рассматривали ли вы использование системных вызовов 'fork',' execve' и 'waitpid' (следовательно, исключая библиотечную функцию' system') и связывались с вашими процессами '* LongWait', используя, например, 'pipe'-s, возможно, с' poll'? –
Да, я тоже пробовал fork & execl .. Если его обычные процессы создаются, то родительский выход завершается так, как ожидалось. но здесь, с MPI, родительский процесс MPI не выходит, пока не будут убиты как «Longwait», так и «AnotherLongWait». – RoboAlex
Вам необходимо, чтобы родительский процесс MPI продолжался до тех пор, пока работает ваш «LongWait». Вы не можете называть 'MPI_Finalize' раньше. –