@echo off
for /l %%i in (1,1,20) do call :loop %%i
goto :eof
:loop
call :checkinstances
if %INSTANCES% LSS 5 (
rem just a dummy program that waits instead of doing useful stuff
rem but suffices for now
echo Starting processing instance for %1
start /min wait.exe 5 sec
goto :eof
)
rem wait a second, can be adjusted with -w (-n 2 because the first ping returns immediately;
rem otherwise just use an address that's unused and -n 1)
echo Waiting for instances to close ...
ping -n 2 ::1 >nul 2>&1
rem jump back to see whether we can spawn a new process now
goto loop
goto :eof
:checkinstances
rem this could probably be done better. But INSTANCES should contain the number of running instances afterwards.
for /f "usebackq" %%t in (`tasklist /fo csv /fi "imagename eq wait.exe"^|find /v /c ""`) do set INSTANCES=%%t
goto :eof
Paralel ve en aza indirilen en fazla dört yeni işlem oluşturur. Her bir işlemin ne kadar sürdüğüne ve ne kadar sürdüğüne bağlı olarak, bekleme süresinin muhtemelen ayarlanması gerekir. Başka bir şey yapıyorsanız muhtemelen görev listesinin aradığı işlem adını da ayarlamanız gerekir.
Bununla birlikte, bu parti tarafından ortaya çıkan süreçleri doğru bir şekilde saymanın bir yolu yoktur. Bunun bir yolu, toplu %RANDOM%
işin ( ) başında rastgele bir sayı oluşturmak ve işlemeyi gerçekleştiren (veya işleme programını üreten) ancak pencere başlığını bir parametreye ayarlayabilen yardımcı bir toplu iş oluşturmaktır:
@echo off
title %1
"%2" "%3"
Bu, başlığını ilk parametreye ayarlayan ve sonra ikinci parametreyi üçüncü ile bağımsız değişken olarak çalıştıran basit bir toplu iş olacaktır. Daha sonra yalnızca belirtilen pencere başlığına ( tasklist /fi "windowtitle eq ..."
) sahip işlemleri seçerek görev listesinde filtreleme yapabilirsiniz . Bu oldukça güvenilir olmalı ve çok fazla yanlış pozitifliği önlemelidir. cmd.exe
Hala çalışan bazı örnekleriniz varsa arama yapmak kötü bir fikir olacaktır, çünkü bu, çalışan işlemleri havuzunuzu sınırlar.
%NUMBER_OF_PROCESSORS%
Kaç tane örnek doğacağının mantıklı bir varsayılanını oluşturmak için kullanabilirsiniz .
psexec
İşlemleri uzaktan oluşturmak için bunu kolayca uyarlayabilirsiniz (ancak diğer makinede yönetici ayrıcalıklarına sahip olmanız ve toplu olarak parola sağlamanız gerektiğinden çok uygun olmaz). Yine de, filtreleme için işlem adlarını kullanmanız gerekir.