Quando um processo gerenciado pelo launchd (como seu script) é encerrado, o launchd "limpará" (ou seja, matará) quaisquer subprocessos restantes. Não tenho certeza dos detalhes, mas aparentemente isso pode incluir algo que / usr / bin / mail dispara em segundo plano para enviar a mensagem. Na minha experiência, o launchd normalmente o mata antes de terminar o envio da mensagem. Solução: diga ao launchd não para matar os subprocessos restantes adicionando isto ao daemon de inicialização plist:
<key>AbandonProcessGroup</key>
<true/>