Possibile soluzione alternativa: quando il tuo programma viene lanciato crea un file di controllo (anche vuoto, nome qualunque tipo "nomeprogramma.running") e il ciclo oltre a quello che deve fare verifica se questo file esiste. Se il file esiste fa quello che deve fare e ricomincia, se non esiste esegue le procedure di chiusura.

A questo punto invece di scrivere quit cancelli il file di controllo.