使用 C 向 Windows 上的另一个进程发送信号替代终止 POSIX

问题描述

我正在将一个为 POSIX 系统编写的 C/Fortran 包移植到 Windows。该软件的大部分 Fortran 部分都运行数学计算。 C 代码充当 Fortran 和系统之间的接口。代码完全基于控制台,没有 GUI。

该软件与 MPI 并行,即在启动后运行多个进程 - 一个主进程和多个子进程。

现在,我在移植时面临的障碍之一是处理信号的 C 代码。主进程和子进程都有各自的信号处理程序。信号处理的实现方式是,当主进程收到 SIGTERM 或 SIGSEGV 时,它会将这些发送给子进程。在 POSIX 中,这是由 kill(pid,SIGTERM) 实现的。子进程的信号处理程序然后与 Fortran 部分交互以优雅地将程序退出

将这种行为移植到 Windows 的最佳策略是什么?我对 Fortran 不太熟悉,所以如果可以的话,我会保持 Fortran 部分不变。我唯一需要确保的是,主进程以某种方式通过它们的 PID 与子进程通信,然后我就可以开始编写代码了。

我问过有关 Windows 上 kill() 的替代方案的问题,似乎没有简单的替代方案。请添加答案,即使这意味着我必须修改大量代码。 C 信号代码可以在我问过这个 here 的另一个问题中看到。

(请不要提及 cygwin 或 WSL。Cygwin 无法编译它,我需​​要从 Windows 运行它,WSL 二进制文件在它之外无法运行)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)