Görev Yöneticisi aracılığıyla işlem önceliğini el ile değiştirmeden bir Windows hizmet işlemini (örn. SquidNT, SQL Server, vb.) Düşük öncelikli otomatik olarak başlayacak şekilde yapılandırmanın bir yolu var mı?
Görev Yöneticisi aracılığıyla işlem önceliğini el ile değiştirmeden bir Windows hizmet işlemini (örn. SquidNT, SQL Server, vb.) Düşük öncelikli otomatik olarak başlayacak şekilde yapılandırmanın bir yolu var mı?
Yanıtlar:
Hizmetlerin başlatılması / durdurulmasıyla ilgilenen Hizmet Denetim Yöneticisi'nin, başlattığı işlemlerin önceliğini belirleyen herhangi bir mekanizması yoktur (şimdiye kadar Windows'un herhangi bir sürümünde).
Zaten çalışan bir işlemde önceliği değiştirebildiğiniz için, en iyi seçeneğiniz bunu yapmak için bir araç kullanmak olabilir.
İşlem önceliğini değiştirmek için bir Microsoft komut satırı aracının farkında değilim, ancak http://www.teamcti.com/pview/prcview.htm adresinde bulunan "PV" komut satırı da önceliği ayarlayacak bir işleve sahip .
pv -pb process-name.exe
Bu, "process-name.exe" yi "Normalin Altında" önceliğine ayarlar.
İşlemi değiştirene kadar "Normal" önceliğinden başlayarak yaşayabiliyorsanız, bunu sık sık kapatmak için "Zamanlanmış Görev" olarak çalışan bir komut dosyasıyla yapabilirsiniz (hizmet alması durumunda) ) geri dönen.
Bu hızlı ve kirli bir hack, ama hayattaki servetimin çoğunu işi bitiren hızlı ve kirli hack'lere borçluyum!
Yukarıdaki cevaplar benim için işe yaramadı. Aşağıdaki powershell betiğini oluşturmayı bitirdim:
ChangePriority.ps1
Get-WmiObject Win32_process -Filter 'name="ProcessName.exe"' | ForEach-Object {$_.SetPriority(128)}
Ve sonra her 5 dakikada bir çağıran zamanlanmış bir görev oluşturdum. Gönderen Yönetici istemi veya toplu komut:
schtasks /Create /tn "Process Priority Change" /sc MINUTE /mo 5 /ru SYSTEM /tr "powershell -noprofile -executionpolicy bypass -file \"%cd%\ChangePriority.ps1\""
wmic
Tartışıldığı gibi kullanmaya çalışıldıZamanlanan görevin dosyaya bağlı olmamasını sağlamak için burada . Benzer şekilde powershell betiğini kullanarak: Sadece satır içi komut dosyası ile bir görev oluşturan tek bir komut oluşturamadım. Yapmayı ve başka bir cevap eklemeyi başardığınızda teşekkür ederiz.
Powershell betiğindeki öncelik değerleri burada bulunabilir [1].
Aşağıdakiler de işe yarayabilir. ImagePath kayıt defteri anahtarını düzenleyin ve cmd.exe dosyasının start komutunu kullanın:
START ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [command/program]
[parameters]
ImagePath
Windows hizmetleri arabirimine saygı duyması gerektiğinden bu hiç işe yaramıyor ve start
bunu gerçekleştirmiyor ya da bunu başlatılan yürütülebilir dosyaya yönlendirmeyecek.
Teamcity'nin daha az işlemci alması için bunu yapmak zorundaydım. Teamcity, çalıştırdığımız tek java uygulaması olduğu için bu çözüm mükemmel çalışıyor.
Hizmetinizi başlatacak ve aşağıdaki gibi önceliği düşürecek bir toplu iş dosyası oluşturun:
net start tcbuildagent
net start teamcity
wmic süreci nerede name = "java.exe" normalin altında "CALL setpriority"
TaskScheduler tetikleyicisini 1 dakikalık bir gecikmeyle yapılandırdım, diğer hizmetlerin başlatılmasını engellemem.
ps Ayrıca, tüm hizmet başlangıçlarınızı manuel olarak ayarlayabilir ve hepsini istediğiniz sırayla başlatmak için bu toplu iş dosyasını kullanabilirsiniz! SQL, IIS vb.