How to stop a niagara system from spawning new particles and still complete existing particles

Deactivate does exactly what the OP was asking for

If the system is attached to an actor that gets destroyed, of course the component will get destroyed as well, killing all particles

If you absolutely want to destroy the actor, you can always detach the component, SetAutoDestroy to ensure that it dies when it’s complete, and deactivate it

But in most similar cases that I’ve encountered, the actor is usually “disabled” so no logic runs, and waits a bit for the effects to end

You can also use AActor::SetAutoDestroyWhenFinished, which will automatically destroy the actor when all latent actions and components on it are finished (by default all components except for Timelines, and effect components are finished allways)