从Windows服务启动子进程

时间:2013-09-13 20:58:21

标签: c++ windows winapi process child-process

我在c ++中有一个XMLRPC windows服务。我需要从它启动子进程,如果Windows服务收到请求并且进程已经存在,我需要结束该特定子进程并再次启动它。我不需要在启动后等待进程退出,但是一旦启动并启动它应该执行的操作,我需要通知主进程。当子进程结束时,它需要通知启动它的服务,以便我可以维护已存在的进程列表。我知道我可以用CreateProcess做到这一点,但是一旦孩子进程遇到特定的事情,我该怎样处理通知的方面。

2 个答案:

答案 0 :(得分:5)

调用CreateProcess后,跟踪进程句柄。您可以使用它来查看流程是否有exited or not,并在必要时致电TerminateProcess

您甚至可以将所有句柄保留在一个数组中,然后只要对WaitForMultipleObjects进行一次调用,就会在任何一个子进程退出后立即通知您。

答案 1 :(得分:2)

如果子进程需要通知主进程,那么您可以使用interprocess communications mechanisms之一。当然,这假设您正在编写子进程的代码。如果您需要知道的是,当子进程开始和结束时,如上一个答案中所述,您可以使用CreateProcesswait functions之一。您可以使用TerminateProcess停止子进程,但这不是一种优雅的方法来停止进程(您可能会在重要的事情中停止它),更温和的方法来停止子进程就是通知子进程您希望它停止的进程(使用进程间通信机制),然后等待它自行停止。哦,我忘了解释,您可以通过将句柄传递给其中一个等待函数来等待进程结束。