En OSX usa launchd para esto. launchd iniciará un comando en el inicio de sesión o arranque y, si el proceso finaliza, se reiniciará.
El proceso está controlado por un archivo .plist formateado como se define en Apple docs el ejemplo en esa página de manual es para el caso que solicita.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.example.exampled</string>
<key>ProgramArguments</key>
<array>
<string>exampled</string>
</array>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
Si desea comenzar cuando un usuario inicia sesión en este archivo, ingrese en ~ / Library / LaunchAgents. Si cuando la máquina arranca, entonces / Library / LaunchDaemons (que no puede tener acceso a la GUI) pero se ejecutará como root a menos que agregue una clave UserName. (Gracias a @Gordon Davisson por la corrección y releer Definiciones de Apple )
Para facilitar la configuración de la .plist puede usar Lingon.app disponible en Mac AppStore