Existe uma maneira de configurar um processo de serviço do Windows (por exemplo, squidNT, SQL Server, etc) para iniciar automaticamente com baixa prioridade sem alterar manualmente a prioridade do processo através do Gerenciador de tarefas?
Existe uma maneira de configurar um processo de serviço do Windows (por exemplo, squidNT, SQL Server, etc) para iniciar automaticamente com baixa prioridade sem alterar manualmente a prioridade do processo através do Gerenciador de tarefas?
Respostas:
O Service Control Manager, que lida com a inicialização / interrupção dos serviços, não possui nenhum mecanismo (em nenhuma versão do Windows até agora) para especificar a prioridade nos processos que ele inicia.
Como você pode modificar a prioridade em um processo já em execução, sua melhor aposta pode ser usar uma ferramenta para fazer isso.
Não conheço uma ferramenta de linha de comando da Microsoft para modificar a prioridade do processo, mas a linha de comando "PV" também disponível em http://www.teamcti.com/pview/prcview.htm tem uma função para definir a prioridade .
pv -pb process-name.exe
Isso definiria "process-name.exe" como prioridade "Abaixo do normal".
Se você pode conviver com o processo iniciando com a prioridade "Normal" até alterá-lo, poderá fazê-lo com um script em execução como uma "Tarefa agendada" para disparar de vez em quando (caso o serviço seja interrompido) saltou).
É um hack rápido e sujo, mas devo muito da minha vida na vida a hacks sujos e rápidos que fazem o trabalho!
As respostas acima não funcionaram para mim. Acabei de criar o seguinte script do PowerShell:
ChangePriority.ps1
Get-WmiObject Win32_process -Filter 'name="ProcessName.exe"' | ForEach-Object {$_.SetPriority(128)}
E então criei uma tarefa agendada que a chamava a cada 5 minutos. No prompt do administrador ou no script em lote:
schtasks /Create /tn "Process Priority Change" /sc MINUTE /mo 5 /ru SYSTEM /tr "powershell -noprofile -executionpolicy bypass -file \"%cd%\ChangePriority.ps1\""
Tentativa de usar wmiccomo discutido aqui para fazer com que a tarefa agendada não dependa do arquivo falhou. Similar ao uso do script powershell: não pude apenas criar um único comando que apenas criava uma tarefa com o script embutido. Apreciado se você conseguiu fazer isso e adicione outra resposta.
Valores para prioridade no script do PowerShell podem ser encontrados aqui [1].
O seguinte também pode funcionar. Edite a chave do Registro ImagePath e use o comando start do cmd.exe:
START ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [command/program]
[parameters]
ImagePathdeve respeitar a interface dos serviços do Windows e startnão é implementado, nem o encaminhará para o executável iniciado.
Eu tive que fazer isso para fazer com que a teamcity levasse menos CPU. E, como o teamcity é o único aplicativo java que estamos executando, essa solução funciona perfeitamente.
Crie um arquivo em lote, que iniciará seu serviço e diminuirá a prioridade, como:
net start tcbuildagent
net start teamcity
wmic processo em que name = "java.exe" CHAMADA setpriority "abaixo do normal"
Configurei o gatilho TaskScheduler com um atraso de 1 minuto, para não interferir na inicialização de outros serviços.
ps, você também pode definir todas as suas inicialização de serviços como manuais e usar esse arquivo em lotes para iniciá-las na ordem desejada! SQL, IIS, etc.