Set Custom App Priority Nice Values in macOS 13

You can set custom application priority nice values in macOS 13 (Ventura) using native Terminal utilities such as nice and renice, as well as Apple’s dedicated taskpolicy command. While modern macOS relies heavily on Mach kernel Quality of Service (QoS) classes to manage hardware scheduling and energy efficiency, standard UNIX process niceness is still supported and functional.

How Process Priority Works in macOS 13

macOS uses a traditional UNIX nice scale ranging from -20 (highest priority) to 20 (lowest priority), with 0 being the default for standard processes. Decreasing a nice value to give an application higher CPU priority requires administrator (sudo) privileges, whereas increasing a nice value to lower an application's priority can be done by standard users.

In macOS 13, the kernel balances these nice values alongside QoS classifications, which categorize threads into tiers like User Interactive, User Initiated, Utility, and Background.

Launching an Application with a Custom Nice Value

To launch an application with a predetermined priority, use the nice command followed by the direct path to the executable inside the .app bundle:

nice -n 10 /Applications/TextEdit.app/Contents/MacOS/TextEdit

To launch an application with higher priority (negative nice value), prepend sudo:

sudo nice -n -10 /Applications/TextEdit.app/Contents/MacOS/TextEdit

Changing the Priority of a Running Application

If the application is already running, you can alter its priority using renice:

  1. Find the Process ID (PID) of the application using Activity Monitor or Terminal:

    pgrep -i "AppName"
  2. Apply the new nice value:

    sudo renice -n 5 -p <PID>

Using taskpolicy for Better macOS Integration

Because macOS 13 heavily prioritizes energy management and QoS over strict POSIX niceness, using the taskpolicy command is often more effective for managing background or high-load processes.

  • Demote an app to background execution (efficiency cores/low priority):

    taskpolicy -b -p <PID>
  • Run a command clamped to background QoS:

    taskpolicy -b /Applications/AppName.app/Contents/MacOS/AppName

Limitations to Consider

Modern macOS applications often spawn multiple independent helper processes (common in web browsers and Electron-based apps). Modifying the PID of the main parent application using renice does not automatically propagate to all child worker threads, requiring you to target specific sub-processes individually if they are responsible for the primary CPU load.