Mam skrypt bash, który montuje i odmontowuje urządzenie, które wykonuje niektóre operacje odczytu pomiędzy. Ponieważ urządzenie działa bardzo wolno, wykonanie skryptu zajmuje około 15 sekund (montaż trwa co najmniej 5-6 sekund). Ponieważ pozostawienie zamontowanego urządzenia może powodować inne problemy, nie chcę, aby ten skrypt został przerwany.Skrypt Bash: nie można poprawnie obsłużyć SIGTSTP
Powiedziawszy to, mogę poprawnie obsługiwać SIGINT (Ctrl + c), ale kiedy próbuję obsłużyć SIGTSTP (Ctrl + Z), skrypt zawiesza się. Co oznacza, że sygnał jest uwięziony, ale program obsługi nie działa.
#!/bin/sh
cleanup()
{
# Don't worry about unmounting yet. Just checking if trap works.
echo "Quitting..." > /dev/tty
exit 0
}
trap 'cleanup' SIGTSTP
...
Ręcznie muszę wysłać sygnał KILL do procesu. Masz pomysł, dlaczego tak się dzieje i jak mogę to naprawić?
To ma sens. Brzmi tak, chyba że wszystkie pliki binarne, które wykonujesz skryptem, również obsługują^z tak, jak robisz, nie ma sposobu na poprawne obsłużenie^z. Czy to prawda? – Ram
Możesz uruchomić zadanie asynchronicznie w pliku setsid i czekać na niego. np: 'setsid cmd & wait' zamiast tylko' cmd'. –
Wygląda na to. Dzięki za pomoc! Ale ciekawy, czy proces nie zostanie zatrzymany podczas nowej sesji? – Ram