Apple's documentation of the launchd options leave a lot to be desired. It leaves out important details and is fairly ambiguous about lots of things. Various people are
trying to document it themselves, so here's another addition for ThrottleInterval.
The launchd.plist man page says:
ThrottleInterval:
This key lets one override the default throttling policy imposed on jobs by launchd. The value is in
seconds, and by default, jobs will not be spawned more than once every 10 seconds. The principle
behind this is that jobs should linger around just in case they are needed again in the near future.
This not only reduces the latency of responses, but it encourages developers to amortize the cost of
program invocation.
What it really means is this:
By default jobs are expected to run for at least 10 seconds. If they run for less than 10 seconds, they will be respawned "10 - runtime" seconds after they die. Exit code is ignored, all that matters is runtime. If a job runs for more than 10 seconds then exits, it will be respawned immediately (assuming all other restart conditions are met).
So instead of just throttling how often a service gets restarted, ThrottleInterval also implies minimum runtime. Which is
surprising to more than just me.
You'll see a message like this in the logs if the service dies inside the ThrottleInterval:
com.apple.xpc.launchd[1] (com.apple.mdworker.shared.03000000-0000-0000-0000-000000000000): Service only ran for 3 seconds. Pushing respawn out by 7 seconds.