Windows Tip: Launching a low priority process

1 comment | 3I like it!
August 11, 2006, 01:28 PM —  ITworld.com — 

Send your Windows question to Mitch today!


See other Windows tips


A friend of mine who is a petroleum engineer recently told me about a problem he was having. He was launching a series of batch jobs (big simulation jobs) on his Windows XP workstation from the command line by running a batch file that contained a series of commands like job5.exe -i input.dat, and his problem was that these jobs were hogging so much of his machine's processing power that foreground tasks became unresponsive. Once these processes were running however, he could open Task Manager and change their priority to Low, and then he could work normally on the machine while the jobs ran in the background. He was wondering if there was a way to start an application with Low priority instead of Normal.



It turns out there are several solutions to this problem. A simple approach is to use the start command to launch each job with Low priority as follows:

start /low /b job5.exe -i input.dat

The /b switch causes the job to run in the current command window but with Low priority. Another solution would be:

start "Job #1" /low job5.exe -i input.dat

This runs the job in a separate command window with "Job #1" in the title bar to distinguish it from the spawning command window in which the batch file itself runs. Still another solution is to do this:

start "Low cmd" /low cmd.exe

This opens a new command window where the cmd.exe process has Low priority and the window's title bar displays "Low cmd." Once this new command window is open, you can run your batch file in it and all jobs spawned by the batch file will run with Low priority also. Still another variation of this is:

start /low /b cmd.exe

This runs a second cmd.exe process with Low priority within your visible Normal priority command window, and again running the batch file will launch all your jobs with Low priority.



Batch file language can be useful, but what if you wanted to select the priority of a job at run time? That's where VBScript provides a more flexible solution. Here's a simple script named LaunchProcess.vbs that I wrote to do this:

Const LOW = 64
Const BELOW_NORMAL = 16384
Const NORMAL = 32
Const ABOVE_NORMAL = 32768
Const HIGH = 128

set args = WScript.Arguments
if args.Count = 0 then
   WScript.Echo "Usage: CScript Launch.vbs JOB PRIORITY"
   WScript.Echo "where JOB is the application or batch file including its path"   
   WScript.Echo "and PRIORITY is HIGH | ABOVE_NORMAL | NORMAL| BELOW_NORMAL | LOW"
   WScript.Echo ""
   WScript.Echo "Example: Cscript Launch.vbs C:\Windows\Notepad.exe BELOW_NORMAL"
   WScript.Quit 1
end if

strJob = args.Item(0)
strPriority = args.Item(1)

if strPriority = "LOW" then
   intPriority = LOW
elseif strPriority = "BELOW_NORMAL" then
   intPriority = BELOW_NORMAL
elseif strPriority = "NORMAL" then
   intPriority = NORMAL 
elseif strPriority = "ABOVE_NORMAL" then
   intPriority = ABOVE_NORMAL
elseif strPriority = "HIGH" then
   intPriority = HIGH 
else
   intPriority = NORMAL 
   strPriority = "NORMAL"
end if

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objStartup = objWMIService.Get("Win32_ProcessStartup")

Set objConfig = objStartup.SpawnInstance_
objConfig.PriorityClass = intPriority
Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process")
objProcess.Create strJob, Null, objConfig, intProcessID

Wscript.Echo strJob & " is running with " & strPriority & " priority."

To use this script, type something like this from the command line:

Cscript LaunchProcess.vbs C:\Windows\Notepad.exe BELOW_NORMAL

This will start Notepad with Below Normal priority, which you can verify using Task Manager.

 

ITworld.com

I like it!
Comments

Parameters

Please show an example of how to launch a command in low priority where the command includes parameters that must be specified in quotes (e.g. parameters that are filenames with spaces)
| reply
Free books

Essential JavaFX
Get started building rich Web apps quickly with an introduction to the power of JavaFX key features -- scene node graphs, nodes as components, the coordinate system, layout options, colors and gradients, custom classes with inheritance, animation, binding, and event handlers.Enter now!

The Nomadic Developer
Consulting can be hugely rewarding, but it's easy to fail if you are unprepared. To succeed, you need a mentor who knows the lay of the land. Aaron Erickson is your mentor, and this is your guidebook. Enter now!

Featured Sponsor

AISO founders envisioned a Web hosting company that was environmentally friendly. While the company employed energy-efficient innovations like solar panels, its infrastructure produced unacceptable power and cooling requirements. Find out how AISO leveraged AMD technology to overcome their challenge in this case study white paper.

In this whitepaper, Scalar explores the opportunity to change the landscape with respect to mission critical databases built around Oracle. Leveraging technologies such as Linux, high-end commodity processing power and Oracle RAC technology to architect, design, build and maintain database infrastructure that delivers maximum availability, reliability and performance at a fraction of traditional cost.

On a typical day, weather.com, the Web site for The Weather Channel in Atlanta, serves up between 15 million and 20 million page views. But in September 2004, when back-to-back hurricanes ransacked Florida, the peak traffic on one day more than tripled: over 70 million page views by more than 7 million unique visitors. Read the full success story now.

Marketplace