В OSX используйте launchd для этого. launchd запустит команду при входе в систему или загрузке и, если процесс умирает, он перезапустит ее.
Процесс контролируется файлом .plist отформатированный как определено в Apple документах пример на этой странице справочника относится к делу, о котором вы просите.
<?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>
Если вы хотите начать, когда пользователь входит в систему, этот файл находится в ~ / Library / LaunchAgents. Если при загрузке машины / Library / LaunchDaemons (которая не может иметь доступ к графическому интерфейсу), но он будет работать от имени пользователя root, если вы не добавите ключ UserName. (Спасибо @Gordon Davisson за исправление и перечитывание Apple определения )
Для простоты настройки .plist вы можете использовать Lingon.app доступно в Mac AppStore