Macos – How to permanently “renice” a process on Mac OS X (or iOS, etc)

launchdmacospriorityprocess

I use a nice (free) process manager called ATMonitor for Mac OS X that has a lot of cool hidden features, one of which is being able to click on a running process and set the "renice" from +20 (less priority) to -20 (highest priority).

The best part is that it sticks between restarts. So you want XYZ to get full attention all the time, you set it once and it's done.

I want to do the same thing (renice a process) on an iPad running a particular daemon, and I don't know how to set a renice permanently.

I can do it once, and it works fine, but the setting is lost on a reboot. I read somewhere.

Now, as for permanently resetting the priority of a process, this can't be done directly. You can fake it, however, with a shell script that starts the app and then immediately renice's it. Give that script a ".command" extension and it will be double-clickable in the GUI. Not very elegant, but it gets the job done.

But as it says, not very elegant, and I dont think this is how ATMonitor does it.

I found this question and they gave a way to do it as a launch argument, but no apparent way to save it as a persistent value. For instance, if the program wasn't going to be started by launchd.

How do I set a permanent renice level, per executable binary, independent of its PID, when, how, or why it was launched?

Best Answer

After a lot of research, I found a way to create an applescript that will launch and renice a program. It will also take care of the whole administrator password thing for you as well. Just replace the xxxxxxxxx with your own password. I've used this with a range of programs, and all seem to work. Honestly, I can't recall why I put a 1-second delay in it; I think I just wanted to ensure that the program had launched before it reniced. I'm sure there are variations on this script. The nice thing about this is that you don't have to open Activity Monitor, find the process ID, etc. This script does all of that for you. I just save each script as an application, launch it, and everything is zippy. By the way, while I love atMonitor, it does have a reported tendency to suddenly hang your system. See the reviews for it on MacUpdate.


tell application "Safari"
    activate
    delay 1
end tell

tell application "System Events" to set unixID to unix id of process "Safari"
do shell script ("renice -20 " & unixID) password "xxxxxxxxx" with administrator privileges
Related Question