Wpis z mikrobloga

Mirki spod tagu #programowanie oraz #bash. Mam taki problem: załóżmy że mam program generujący (niedeterministyczne) rozwiązanie. I teraz chciałbym w pętli odpalać ten program, sprawdzać czy to co wygenerował jest lepsze od dotychczasowej odpowiedzi - i jeżeli tak to ją aktualizować. Najprostszy skrypt mógłby wyglądać tak:

while [ 1 ] ; do
./program > out.txt
if [ jakis_tam_warunek ] ; then
cp out.txt best.txt
fi
done

I teraz mój problem: jeżeli zamknę ten skrypt za pomocą ctrl+c akurat w momencie gdy została znaleziona nowa, lepsza odpowiedź i jest kopiona do best.txt, wtedy plik z rozwiązaniem zostaje urwany, a ja tracę wynik pracy. Czy da się jakoś zamaskować sygnały w linijce, w której jest kopiowanie, żeby tego uniknąć? Jedyne co wymyśliłem to całkowite obejście problemu: zamiast zamykać sygnałem z konsoli, to pod koniec pętli sprawdzam czy w pliku exit.txt jest informacja, żeby skrypt się zamknął - ale to dość toporne.
  • 2
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@noweKontoNr69: Przecież jeśli plik best.txt jest urwany to znaczy, że rozwiązanie jest out.txt (skoro przerwane jest kopiowanie)

Albo umieść kopiowanie w nowym niezależnym wątku. Przerywając pętle wątek kopiowania się dokończy nieprzerwany.
  • Odpowiedz