c#进程管理
本文关键字:进程管理 | 更新日期: 2023-09-27 18:05:11
我们正在尝试实现一个启动进程的程序。但是内存中最多可以同时运行2个进程。如果进程数超过2,由于许可策略,我们会得到异常。所以基本上我们需要等到两个进程结束,然后再启动另外两个进程,直到我们完成。我试图检查内存中是否有2个或更多进程,然后使线程睡眠,但它似乎不工作良好
while (Process.GetProcesses().Where(x => x.ProcessName == "myProcessName").Count() >= 2)
{
Thread.Sleep(100);
}
//Start next process
任何想法?非常感谢!
似乎您需要SemaPhore来确保atmax 2进程同时运行
您可以启动进程,然后等待Exited
事件重新启动另一个进程,如下所示:
using System;
using System.Diagnostics;
namespace ConsoleApplication1 {
class Program {
static void StartProcess(string Path) {
Process Process = Process.Start(Path);
Process.EnableRaisingEvents = true;
Process.Exited += (sender, e) => {
StartProcess(Path);
};
}
static void Main(string[] args) {
for (int i = 0; i < 2; i++) {
StartProcess("notepad");
}
Console.ReadLine();
}
}
}
这将考虑已经运行的进程,并且只在先前运行的进程全部退出的情况下启动新进程。
string processName = "calc";
int processCount = 2;
while ( true )
{
while ( Process.GetProcessesByName( processName ).Count() < processCount )
{
Process.Start( processName );
}
var tasks = from p in Process.GetProcessesByName( processName )
select Task.Factory.StartNew( p.WaitForExit );
Task.WaitAll( tasks.ToArray() );
}
我们找到了临时解决方案:
while (true)
{
lock (_lock)
{
if (Process.GetProcesses().Where(x => x.ProcessName == "processName").Count() < GetProcessNumber)
{
//do Smth
break;
}
Thread.Sleep(1000);
}
}