在Windows中启动和监视一个进程的多个实例

时间:2014-01-09 10:19:35

标签: windows process

我有一个Windows应用程序,我需要运行多个实例,使用不同的命令行参数。该应用程序非常不稳定,每48小时左右就会崩溃。

由于手动检查故障并重新启动,如果不是我喜欢做的事情,我想写一个“经理程序”。它会启动程序(所有实例),然后观察它们。如果进程崩溃,它将重新启动。

在Linux中我可以使用fork()和pids来实现这一点,但这显然在Windows中不可用。那么,我应该尝试实现CreateProcess版本还是有更好的方法?

2 个答案:

答案 0 :(得分:1)

当您调用CreateProcess时,将返回您传递给hProcess的流程信息结构的CreateProcess成员中新流程的句柄。您可以使用此句柄来检测进程何时终止。

例如,您可以创建另一个线程并调用WaitForSingleObject(hProcess)并阻塞,直到进程终止。然后你可以决定是否重新启动它。

或者您可以致电GetExitCodeProcess(hProcess, &exitcode)并测试exitcode。如果它具有值STILL_ACTIVE,那么您的进程尚未终止。这种基于GetExitCodeProcess的方法需要进行轮询。

答案 1 :(得分:1)

如果它可以作为守护程序运行,确保它继续运行的最简单方法是Non-Sucking Service Manager

它将允许作为未设计为服务的win32服务应用程序运行。如有必要,它将监视并重新启动。如果需要任何自定义,则包含源代码。

您需要做的就是将每个实例定义为服务,并使用所需的参数,其余部分将完成。

如果您有某种安全警察限制且无法使用第三方工具,则必须进行编码。 David Heffernan给出的答案适合你。

或者它可以在批处理,vbs或js中完成,无需系统之外的任何东西。 WMI Win32_Process类应该允许您处理它。