C Windows:生成子进程以停止和重新启动(超时后)父进程

Posted

技术标签:

【中文标题】C Windows:生成子进程以停止和重新启动(超时后)父进程【英文标题】:C Windows: generate a child process in order to stop and restart (after timeout) the parent process 【发布时间】:2018-04-16 08:06:30 【问题描述】:

我必须实现一个程序,除其他外,它必须杀死自己(响应接收到的命令)并在中止前设置的超时后重新启动;此外,它必须记录重启是由于这种操作。在 linux 中,这可以很容易地使用 fork 并管理不同的 pid 来完成,但不幸的是我必须在 windows 中使用纯 C 来实现这个程序。我读过几篇文章,说在 windows 中克隆 fork 是一个真正的痛苦.我试图理解 createProcess 但在这种情况下似乎没有这样说明。解决方案可以是实现第二个程序并通过 createProcess 和命令行参数将超时传递给它,但如果可能的话,我希望避免这样做。

【问题讨论】:

命令行可能是最好的解决方案,除非您想使用命名管道并从标准输入读取进程。 谢谢@garr-godfrey 【参考方案1】:

如果您需要 fork() 语义,那么您的选择是:

    Windows Subsystem on Linux,已经有了fork() Cygwin,它也有一个 fork() 自己编写...这不容易...一点也不

如果你可以“作弊”,一个选择是创建和杀死 线程 而不是进程。对于瞬态数据,您可以使用 TLS(线程本地存储)。

另一个作弊方法是创建转储文件。比如说,在终止进程之前用MiniDumpWriteDump 保存一个文件,然后在启动一个新进程时用MiniDumpReadDumpStream 读取它。这也不是那么容易,如果您重建应用程序并使用旧的转储文件,它会失败。但是,至少它是一个众所周知的 Windows API。

如果上述方法都不适合您,则剩下的唯一选择是使用 CreateProcess(),它是 spawn(),而不是 fork(),然后添加代码以支持您需要的 fork() 功能。

【讨论】:

以上是关于C Windows:生成子进程以停止和重新启动(超时后)父进程的主要内容,如果未能解决你的问题,请参考以下文章

Windows 上的 Python 子进程:启动子进程“cmd.exe”并为其提供 bat 文件,停止主进程执行

使用Nginx命令启动,停止和重新加载Nginx

CreateProcessAsUser,C#写的windows服务弹框提示消息或者启动复杂的UI界面的子进程

Electron 主进程和渲染进程

子python进程卡住了

APACHE 崩溃:父进程:子进程以状态 3221225477 退出 -- 正在重新启动