Esiste un modo per configurare un processo del servizio Windows (ad esempio squidNT, SQL Server, ecc.) Per l'avvio automatico con priorità bassa senza modificare manualmente la priorità del processo tramite Task Manager?
Esiste un modo per configurare un processo del servizio Windows (ad esempio squidNT, SQL Server, ecc.) Per l'avvio automatico con priorità bassa senza modificare manualmente la priorità del processo tramite Task Manager?
Risposte:
Service Control Manager, che gestisce i servizi di avvio / arresto, non ha alcun meccanismo (in nessuna versione di Windows finora) per specificare la priorità sui processi che avvia.
Dal momento che è possibile modificare la priorità su un processo già in esecuzione, la soluzione migliore potrebbe essere quella di utilizzare uno strumento per farlo.
Non sono a conoscenza di uno strumento da riga di comando Microsoft per modificare la priorità del processo, ma anche la riga di comando "PV", disponibile su http://www.teamcti.com/pview/prcview.htm ha una funzione per impostare la priorità .
pv -pb process-name.exe
Ciò imposterebbe "process-name.exe" sulla priorità "Sotto il normale".
Se riesci a convivere con il processo che inizia con la priorità "Normale" fino a quando non riesci a cambiarlo, puoi farlo con uno script in esecuzione come "Attività pianificata" per attivarlo ogni tanto (nel caso in cui il servizio venga rimbalzato).
È un trucco rapido e sporco, ma devo molta della mia fortuna nella vita a hack rapidi e sporchi che fanno il lavoro!
Le risposte sopra non hanno funzionato per me. Ho finito di creare il seguente script PowerShell:
ChangePriority.ps1
Get-WmiObject Win32_process -Filter 'name="ProcessName.exe"' | ForEach-Object {$_.SetPriority(128)}
E poi ho creato un'attività pianificata che la chiama ogni 5 minuti. Dal prompt dell'amministratore o dallo script batch:
schtasks /Create /tn "Process Priority Change" /sc MINUTE /mo 5 /ru SYSTEM /tr "powershell -noprofile -executionpolicy bypass -file \"%cd%\ChangePriority.ps1\""
Tentativo di utilizzare wmic
come discusso qui per rendere l'attività pianificata non dipendente dal file non riuscita. Simile usando lo script PowerShell: non ero in grado di creare un singolo comando che creasse semplicemente un'attività con lo script incorporato. Apprezzato se sei riuscito a farlo e aggiungi un'altra risposta.
I valori di priorità nello script PowerShell sono disponibili qui [1].
Di seguito potrebbe anche funzionare. Modifica la chiave di registro di ImagePath e usa il comando start da cmd.exe:
START ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [command/program]
[parameters]
ImagePath
deve rispettare l'interfaccia per i servizi di Windows e start
non implementare né indirizzare questo all'eseguibile avviato.
Ho dovuto farlo per far sì che teamcity richiedesse meno CPU. E poiché teamcity è l'unica app java in esecuzione, quella soluzione funziona perfettamente.
Crea un file batch, che avvierà il tuo servizio e ridurrà la priorità, come:
net start tcbuildagent
net start teamcity
processo wmic dove name = "java.exe" CALL setpriority "below normal"
Ho configurato il trigger TaskScheduler con un ritardo di 1 minuto, per non interferire con l'avvio di altri servizi.
ps puoi anche impostare l'avvio di tutti i tuoi servizi come manuale e utilizzare quel file batch per avviarli tutti nell'ordine desiderato! SQL, IIS, ecc.