Is there a way to manage this directly or should I've add a function node that manage the behavior i.e. if input from switch is true, then do nothing if already running?
If you check the sidebar info for the exec node you will see it need msg.kill to kill / stop it - not a msg.payload - so you need a split node (to separate on and off) and the a change node in the off leg to set msg.kill to SIGTEM.