我正在寻找使用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,或者我提出的总体设计建议。
答案 0 :(得分:2)
判断进程是否已退出的最简单方法是等待其处理。您可以通过以下几种方式实现这一目标:
答案 1 :(得分:1)
如果要使用等待操作替换池,可以对创建的进程使用WaitForSignalObject / WaitForMultipleObjects。进程退出时,进程句柄将发出信号。与池不同,等待操作不会消耗CPU。除非发出一个对象信号,否则等待线程处于非活动状态。