Use launchd
e especifique as seguintes na configuração do LaunchDaemon / LaunchAgent:
<key>KeepAlive</key>
<true/>
This optional key is used to control whether your job is to be kept continuously running or to let demand and conditions control the invocation. The default is false and therefore only demand will start the job. The value may be set to true to unconditionally keep the job alive. [...]
Para reiniciar, acredito que você pode apenas kill
e voltará automaticamente.