我正在寻找使用 Win32 API 构建任务监视器/管理器。它将使用命令行参数启动(最好作为 Windows 服务),指定它应该启动多少个新进程实例。
task_man.exe 40
将启动 40 个进程实例
task.exe
现在,无论何时 task.exe 退出(正确与否),我都必须启动一个新的来替换它。
我的大致思路是这样的:
从 task_man 启动任务,获取它们的 PID,然后有一个循环检查 PID 是否都是事件进程。对于每个无效的 PID,启动一个新进程并用新的 PID 替换旧的 PID。
我可以使用更好的设计或更好的工作流程吗?有这样做的标准方法吗?我不想重新发明轮子...另外,我应该研究哪些 API?
我也在寻找一种易于事后更改的设计 - 即如果我运行
task_man.exe 30
之后,一个新的 task_man 不应该开始运行,而是应该改变前一个实例中的任务数量。 (我知道它会开始运行,我的意思是它应该修改原来的然后退出)
我不是在寻找代码(因为我不是在寻找完整的实现,而不是我介意查看示例),而是我可以使用哪些 API,或者对我提出的整体设计的建议。
最佳答案
判断进程是否退出的最简单方法是等待它的句柄。您可以通过几种方式做到这一点:
- 构建所有进程句柄的数组,并使用WaitForMultipleObjects (bWaitAll 为 FALSE)等待所有这些。然后,当您的代码继续执行时,您将必须弄清楚哪个进程结束了,创建一个新进程,更新数组并再次等待。
- 运行 40 个线程,每个线程创建一个进程并无限等待其一个句柄(使用 WaitForSingleObject)。然后,当该任务结束时,该线程将负责创建一个新任务并等待它。
- 如果您不想创建 40 个线程,只需让一个线程在每个进程句柄上短时间等待(使用 WFSO),然后检查返回值。您的程序将以这种方式响应较慢,但会更容易识别已结束的进程,并且您不会创建很多线程。
关于c++ - C++ 中的任务监视器和管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7510463/