nohup sh -c "<Main Process>; <reporting process>" &
em que você executa de maneira assíncrona um shell nohup
ed que executa o processo principal,
e, em seguida, executa o processo de relatório / limpeza (incondicionalmente)
após o processo principal terminar (por qualquer motivo).
Uma solução mais robusta seria escrever um script curto:
#!/bin/sh if <Main Process> then <handling for normal termination> else <handling for abnormal termination> fi
ou
#!/bin/sh <Main Process> case "$?" in ︙ esac
e, em seguida, execute o script com nohup foo.sh &
Se sua única preocupação é o aplicativo morrer por causa de algum erro interno, Esta é provavelmente a melhor solução. Se houver o risco de algum processo outro enlouquecer e enviar um monte de sinais letais, então existe a possibilidade de que o escudo (que está aguardando o término do aplicativo) também pode ser surpreendido, e, portanto, não conseguir iniciar o processo de limpeza. Nesse caso, você pode querer considerar o superusuário do G-Man answer , o que sugere ter um processo de monitoramento que envia um sinal 0 para o aplicativo periodicamente. Se obtiver uma indicação de erro de que o processo não existe mais, então inicia a ação de limpeza.