我必须实现一个程序,除其他外,它必须终止自身(响应收到的命令)并在中止之前设置的超时后重新启动;此外,它还必须记录重新启动是由于这种操作引起的。在Linux中,这可以很容易地使用fork并管理不同的pid来完成,但不幸的是我必须在Windows中使用纯C来实现这个程序。我读过几篇文章,说在Windows中克隆fork是一个真正的痛苦。我试图理解 createProcess 但在这种情况下似乎没有那么指示。解决方案可以是实现第二个程序并通过 createProcess 和命令行参数将超时传递给它,但这是我希望尽可能避免的灵魂。
最佳答案
如果您需要 fork()
语义,那么您的选择是:
- Windows Subsystem on Linux ,它已经有一个 fork()
- Cygwin ,它还有一个 fork()
- 编写您自己的...这不容易...一点都
如果你可以“作弊”,一个选择是创建和终止线程而不是进程。对于 transient 数据,您可以使用 TLS(线程本地存储)。
另一个作弊方法是创建转储文件。比如说,用 MiniDumpWriteDump 保存文件在终止进程之前,稍后使用 MiniDumpReadDumpStream 读取它当开始一个新的进程时。这也不是那么容易,如果您重建应用程序并使用旧的转储文件,则会失败。但是,至少它是一个众所周知的 Windows API。
如果以上方法都不适合您,那么唯一剩下的选择是使用 CreateProcess(),它是一个spawn(),而不是fork(),然后添加代码来支持您需要的 fork() 功能。
关于C 窗口 : generate a child process in order to stop and restart (after timeout) the parent process,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49852377/