Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Windows:生成子进程以停止并重新启动父进程(超时后)_C_Windows_Fork_Createprocess - Fatal编程技术网

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

C Windows:生成子进程以停止并重新启动父进程(超时后),c,windows,fork,createprocess,C,Windows,Fork,Createprocess,我必须实现一个程序,除其他外,它必须自杀(响应接收到的命令)并在中止前设置的超时后重新启动;此外,它必须记录重启是由于这种操作。在linux中,使用fork和管理不同的pid可以很容易地实现这一点,但不幸的是,我必须在windows中使用纯C实现这个程序。我读了几篇文章,说在windows中克隆fork是一件非常痛苦的事情。我曾试图理解createProcess,但在本例中似乎没有这样指出。解决方案可以是实现第二个程序,并通过createProcess和命令行参数将超时传递给它,但如果可能的话,

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

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

  • ,它已经有一个fork()
  • ,它还有一个fork()
  • 写你自己的。。。这不容易。。。根本
  • 如果您可以“作弊”,那么可以选择创建和杀死线程,而不是进程。对于瞬态数据,可以使用TLS(线程本地存储)

    另一个欺骗是创建转储文件。例如,在终止进程之前使用保存文件,在启动新进程时使用读取文件。这也不是那么容易,如果重新构建应用程序并使用旧的转储文件,则会失败。但是,至少它是一个众所周知的Windows API


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

    命令行可能是最好的解决方案,除非您想使用命名管道并从stdin.Thankx@garr godfrey读取进程