Когда завершается процесс, управляемый launchd (например, ваш скрипт), launchd "очистит" (т.е. убьет) любые оставшиеся подпроцессы. Я не уверен в деталях, но, очевидно, это может включать в себя то, что / usr / bin / mail запускается в фоновом режиме для отправки сообщения. По моему опыту, launchd обычно убивает его до того, как заканчивает отправку сообщения. Решение: скажите launchd не уничтожать оставшиеся подпроцессы, добавив это в plist демона запуска:
<key>AbandonProcessGroup</key> <true/>