это зависит от того, как вы определяете холостой ход.
Однако вы могли бы создать какую-то эвристику для определения процесса как бездействующего с использованием класса Process. Я предполагаю, что процесс «бездействует», если он не потребляет более thresholdMillis в течение определенного периода времени
Process p = Process.GetProcessById(proc_id);
TimeSpan begin_cpu_time = p.TotalProcessorTime;
//... wait a while
p.Refresh();
TimeSpan end_cpu_time = p.TotalProcessorTime;
if(end_cpu_time - begin_cpu_time < TimeSpan.FromMillis(thresholdMillis))
{
//..process is idle
}
else
{
//..process is not idle
}
поэтому в зависимости от того, как вы выберете значение threshold_millis, вы получите разные результаты. но это должно быть неплохой эвристикой, чтобы увидеть, если процесс простаивает.
В идеале вы, вероятно, использовали бы какой-либо таймер для периодического запроса и обновления «бездействия» процесса.