Есть ли способ настроить процесс службы Windows (например, squidNT, SQL Server и т. Д.) Для автоматического запуска с низким приоритетом без изменения приоритета процесса вручную с помощью диспетчера задач?
Есть ли способ настроить процесс службы Windows (например, squidNT, SQL Server и т. Д.) Для автоматического запуска с низким приоритетом без изменения приоритета процесса вручную с помощью диспетчера задач?
Ответы:
Диспетчер управления службами, который управляет запуском / остановкой служб, не имеет какого-либо механизма (до сих пор ни в одной версии Windows) для указания приоритета запускаемых процессов.
Поскольку вы можете изменить приоритет уже запущенного процесса, лучше всего использовать инструмент для этого.
Мне не известен инструмент командной строки Microsoft для изменения приоритета процесса, но в командной строке «PV», доступной по адресу http://www.teamcti.com/pview/prcview.htm, есть функция для установки приоритета. ,
pv -pb process-name.exe
Это установило бы для «process-name.exe» приоритет «Ниже нормального».
Если вы можете жить с процессом, начинающимся с «нормального» приоритета, пока не дойдете до его изменения, вы можете сделать это с помощью скрипта, выполняемого как «Запланированная задача», который запускается время от времени (в случае, если служба получает подпрыгнул).
Это быстрый и грязный хак, но я многим обязан в жизни быстрым и грязным хакерам, которые сделали свою работу!
Приведенные выше ответы не сработали для меня. Я закончил создание следующего сценария powershell:
ChangePriority.ps1
Get-WmiObject Win32_process -Filter 'name="ProcessName.exe"' | ForEach-Object {$_.SetPriority(128)}
А потом я создал запланированное задание, которое вызывало его каждые 5 минут. Из командной строки администратора или пакетного сценария:
schtasks /Create /tn "Process Priority Change" /sc MINUTE /mo 5 /ru SYSTEM /tr "powershell -noprofile -executionpolicy bypass -file \"%cd%\ChangePriority.ps1\""
Попытка использовать, wmic
как описано здесь, чтобы запланированное задание не зависело от файла, не удалось. Аналогично использованию сценария powershell: мне не удалось создать одну команду, которая просто создала бы задачу с помощью встроенного сценария. Ценится, если вам удалось сделать это и добавить еще один ответ.
Значения приоритета в скрипте powershell можно найти здесь [1].
Следующее может также работать. Отредактируйте раздел реестра ImagePath и используйте команду запуска из cmd.exe:
START ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [command/program]
[parameters]
ImagePath
должен соответствовать интерфейсу служб Windows, и start
не реализует, и не будет перенаправлять его на запускаемый исполняемый файл.
Я должен был сделать это, чтобы заставить teamcity брать меньше процессоров. И поскольку teamcity - единственное Java-приложение, которое мы запускаем, это решение отлично работает.
Создайте пакетный файл, который запустит ваш сервис и понизит приоритет, например:
net start tcbuildagent
net start teamcity
wmic процесс, где name = "java.exe" CALL setpriority "ниже обычного"
Я настроил триггер TaskScheduler с задержкой в 1 минуту, чтобы не мешать запуску других служб.
ps вы также можете установить запуск всех ваших служб как ручной, и использовать этот командный файл для запуска всех из них в нужном вам порядке! SQL, IIS и т. Д.