There is no "live task", I'm not sure what you're talking about there, or how there are three strategies of holding on to it...

The registration is the Signal handler (process signals like SIGTERM/SIGINT), which you need to unregister after the TaskEngine dies.

For Strategy to be immutable, we'd have to have it return the State to pass into "finish" (which is ok).   Is that what you want?   I'd be ok with that change, feels like it fits sbt a bit better.   The issue with the "raw" API for singals (from the JDK) is that it's OS-level and pure mutable, so we can't hide that perfectly, but I can do a better job.