1

我的 mpi 应用程序有一个信号处理程序来捕获 ctrl-C 或 ctrl-break 一个 Windows,当这个应用程序在 cmd 窗口中串行运行时,它可以工作。它被拦截,然后代码执行最后一个输出,代码优雅地退出。

但是,当我与例如“mpiexec -np 2 myparapp.exe”并行运行它并按 ctrl-C 或 ctrl-break 时,信号似乎无法到达我的应用程序,因为它被突然终止。我需要做一些特别的事情吗,比如确保我的信号处理程序在代码中的特定位置注册?

我正在使用 MSMPI,据我所知,它是 mpich 的一个分支。

4

1 回答 1

2

微软的人好心地回复了我,

目前无法将 Ctrl-C/Ctrl-Break 事件直接传递给子进程。Mpiexec 具有 Ctrl-C 处理程序来处理干净地中止应用程序,但它不会将 Ctrl-C 事件传递给进程。

我目前正在为 mpiexec 编写一个包装器,它将拦截信号并放下一个文件以向应用程序发出它应该退出的信号。

于 2016-09-08T19:58:34.440 回答