In OSX usa launchd per questo. launchd avvierà un comando all'accesso o all'avvio e se il processo muore, verrà riavviato.
Il processo è controllato da un file .plist formattato come definito in Apple docs l'esempio in quella pagina di manuale è per il caso che chiedi.
<?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>
Se vuoi iniziare quando un utente accede al file va in ~ / Library / LaunchAgents. Se la macchina si avvia, quindi, / Library / LaunchDaemons (che non può accedere alla GUI), ma verrà eseguito come root a meno che non si aggiunga una chiave UserName. (Grazie a @Gordon Davisson per la correzione e una rilettura di definizioni Apple )
Per semplificare l'impostazione di .plist up puoi usare Lingon.app disponibile dal Mac AppStore