2016-09-06 5 views
0

내 mpi 응용 프로그램에는 ctrl-C를 잡아 내거나 ctrl-break Windows를 처리하는 신호 처리기가 있으며이 응용 프로그램을 cmd 창에서 직렬로 실행하면 작동하는 것으로 보입니다. 인터셉트 된 후 코드는 마지막 출력을 내고 코드는 정상적으로 종료됩니다.Windows에서 mpiexec을 통해 신호를 전달하는 방법은 무엇입니까?

그러나 예를 들어 "mpiexec -np 2 myparapp.exe"와 병렬로 실행하고 ctrl-C 또는 ctrl-break를 누르면 신호가 내 응용 프로그램에 도착하지 않는 것 같습니다. 갑자기. 내 시그널 핸들러가 코드의 특정 위치에 등록되어 있는지 확인해야 할 필요가있는 특별한 것이 있습니까?

나는 MSMPI를 사용하고 있는데, 나는 mpich의 포크라고 생각합니다. 마이크로 소프트

+0

어떤 MPI 구현을 사용하고 있습니까? OpenMPI라면 http://linux.die.net/man/1/mpiexec를 살펴볼 수 있습니다. – user3630220

+0

'mpiexec'은 프로세스를 죽이거나 아마도 의도적으로 컨트롤 -c를 잡아 내지 만 컨트롤 C를 잡아 내지 못했을 가능성이 높습니다. 이 문제를 해결할 방법이 있는지 여부는 특정 구현 방식에 따라 다릅니다. (C 런타임은 어느 정도까지는 에뮬레이트하지만 Windows에는 실제로 신호가 없다는 것을주의하는 것이 도움이 될 수 있습니다.) –

답변

1

의 사람들은 친절

가 현재는 자식 프로세스에 직접하려면 Ctrl-C/Ctrl 키 브레이크 이벤트 를 통과 할 수 없습니다, 다시와 나에게 얻었다. Mpiexec은 Ctrl-C 핸들러를 사용하여 을 응용 프로그램을 완전히 중단 시키지만 Ctrl-C 이벤트는 프로세스에 전달하지 않습니다.

나는 현재 신호를 차단하고 종료해야하는 응용 프로그램에 표시하기 위해 파일을 내려 놓고 것이다 mpiexec에 대한 래퍼를 작성 추구하고있다.

+0

Mpiexec이 시스템을 종료하려고한다는 것을 응용 프로그램이 인식 할 수 있는지 여부를 묻고 싶을 수 있습니다 깨끗하게. –