C 窗口 : generate a child process in order to stop and restart (after timeout) the parent process

标签 c windows fork createprocess

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

最佳答案

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

  1. Windows Subsystem on Linux ,它已经有一个 fork()
  2. Cygwin ,它还有一个 fork()
  3. 编写您自己的...这不容易...一点都

如果你可以“作弊”,一个选择是创建和终止线程而不是进程。对于 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/

相关文章:

c# - 文件夹权限

java - 从另一个 Java 应用程序中查找并终止特定的 Java 进程

c - Pop() 方法总是给出堆栈中的第一个元素而不删除它

c - fscanf 解析文件中的设置

c - 从 C 世界寻找脚本语言

c++ - 如何从另一个打开的表单读取和更改主表单内的变量?

c++ - 子进程的返回值

python - 了解 os.fork 和 Queue.Queue

github - 如何通过查看 github 的网络图来选择要使用的正确分支/fork?

c - SDL 和 GLUT 之间的区别