um manipulador de interrupção personalizado para mpirun

Pelo visto,mpirun usa um manipulador SIGINT que "encaminha" o sinal SIGINT para cada um dos processos gerados.

Isso significa que você pode escrever um manipulador de interrupção para o seu código habilitado para mpi, executarmpirun -np 3 my-mpi-enabled-executable e então o SIGINT será gerado para cada um dos três processos. Logo depois disso, mpirun sai. Isso funciona bem quando você tem um pequeno manipulador personalizado que imprime apenas uma mensagem de erro e, em seguida, sai.Contudo, quando seu manipulador de interrupção personalizado estiver executando uma tarefa não trivial (por exemplo, fazendo cálculos sérios ou persistindo em dados), o manipulador não é executado até a conclusão. Estou assumindo que isso é porque o mpirun decidiu sair cedo demais.

Aqui está o stderr ao pressionarctrl-c (isto é, causando SIGINT) após a execuçãomy-mpi-enabled-executable. Este é o comportamento esperado desejável:

interrupted by signal 2.
running viterbi... done.
persisting parameters... done.
the master process will now exit.

Aqui está o stderr ao pressionarctrl-c depois de executarmpirun -np 1 my-mpi-enabled-executable. Este é o comportamento problemático:

interrupted by signal 2.
running viterbi... mpirun: killing job...

--------------------------------------------------------------------------
mpirun noticed that process rank 0 with PID 8970 on node pharaoh exited on signal 0 (Unknown signal 0).
--------------------------------------------------------------------------
mpirun: clean termination accomplished

Respondendo a qualquer das seguintes perguntas resolverá meu problema:

Como sobrescrever o manipulador SIGINT do mpirun (se possível)?Como evitar o término dos processos mpirun gerados logo após o término do mpirun?Existe outro sinal que o mpirun pode estar enviando para os processos filhos antes de o mpirun terminar?Existe uma maneira de "capturar" o chamado "sinal 0 (sinal desconhecido 0)" (veja o segundo stderr acima)?

Estou executando o openmpi-1.6.3 no linux.

questionAnswers(2)

yourAnswerToTheQuestion