是否可以将Windows服务进程(例如squidNT,SQL Server等)配置为以低优先级自动启动,而无需通过任务管理器手动更改进程优先级?
是否可以将Windows服务进程(例如squidNT,SQL Server等)配置为以低优先级自动启动,而无需通过任务管理器手动更改进程优先级?
Answers:
处理启动/停止服务的服务控制管理器没有任何机制(在任何Windows版本之前)都不能指定其启动进程的优先级。
由于您可以在已经运行的流程上修改优先级,因此最好的选择是使用工具来做到这一点。
我不知道可以使用Microsoft命令行工具来修改进程优先级,但是http://www.teamcti.com/pview/prcview.htm上的“ PV”命令行也具有设置优先级的功能。 。
pv -pb process-name.exe
这会将“ process-name.exe”设置为“低于正常”优先级。
如果您可以忍受以“正常”优先级开始的流程,直到可以进行更改为止,则可以使用作为“计划任务”运行的脚本来执行,以每隔一段时间触发一次(以防服务获取弹跳)。
这是一个快速而又肮脏的hack,但是我将自己的一生都归功于快速而又肮脏的hack,使工作得以完成!
以上答案对我没有用。我结束了以下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减少cpu。而且,由于teamcity是我们正在运行的唯一Java应用程序,因此该解决方案可以完美运行。
创建一个批处理文件,它将启动您的服务,并降低优先级,例如:
net start tcbuildagent
net start teamcity
wmic进程,其中name =“ java.exe” CALL setpriority“低于正常”
我将TaskScheduler触发器配置为延迟1分钟,以不干扰其他服务的启动。
ps,您还可以将所有服务启动设置为手动,然后使用该批处理文件按所需顺序启动所有服务!SQL,IIS等