Depende de como seu serviço é interrompido. Só você sabe: os métodos de início e término do serviço são coisas que você deve documentar para os usuários do seu serviço e, idealmente, fornecer.
Se seu serviço for interrompido enviando um sinal chamando kill
de um script de shell, isso é assíncrono. O comando kill
ou a chamada do sistema envia um sinal para um processo e retorna imediatamente. Não há nenhum mecanismo para o processo telefonar de volta para notificar que processou o sinal para sua satisfação. Então você precisa encontrar outro método para sinalizar que está pronto.
Muitos métodos são possíveis, como fazer com que o serviço crie ou remova um arquivo e o script de controle observe as alterações feitas nesse arquivo. No entanto, eles tendem a ser desajeitados. Enviar um sinal de um processo não relacionado não é um método muito bom se você precisar de feedback quando o serviço for concluído.
Se o seu serviço for interrompido por meio de uma diretiva stop
em uma descrição de serviço Upstart, o Upstart envia um sinal para o processo. O Upstarts aguarda alguns segundos para o processo parar. Como o Upstart é o pai do processo, ele recebe uma notificação do kernel (um sinal SIGCLD) quando o processo é encerrado. Isso só funciona bem quando o processo não se bifurca para se colocar em segundo plano; As descrições de serviço do Upstart normalmente chamam daemons com uma opção que diz a eles para não bifurcar (por exemplo, ssh -D
).
Os serviços avançados têm um comando de limitação. Quando você chama o comando de limitação, eles param de aceitar novas conexões. Quando todas as conexões pendentes são fechadas, o serviço envia uma resposta positiva ao comando de limitação e, em seguida, sai. O método de comunicação é tipicamente um soquete Unix ou IP.