Nie wiedziałem, czy to należy do SO (ponieważ jest to błąd kodowy), ale pomyślałem, że będziecie bardziej kompetentni w zakresie subtelności używanego oprogramowania (więc może nawet U&L może być brany pod uwagę).
Oto minimalny skrypt kodu (zobacz zmiany dla pełnego skryptu, jest powód, dla którego robię to w ten sposób);
#/bin/bash
nohup {SERVERCOMMAND} > currentOutput.log 2>&1 &
less +F currentOutput.log
Próbuje uruchomić serwer w tle, który generuje plik dziennika.
Potem używam followtego pliku dziennika less +F. Aby to zakończyć, musisz nacisnąć ctrl+, czanim będziesz mógł uderzyć Q.
Co się dzieje, gdy I ctrl+ cwewnątrz lesspolecenia (aby zatrzymać tailing) to w jakiś sposób zabija serwer rozpoczęty nohupna górze! Nie ma to wpływu na nic innego. Mogę shift+ fponownie rozpocząć dostosowywanie dziennika (który nie otrzymuje żadnych nowych informacji, ponieważ serwer został zabity) i jeśli trafię Qw pozostałą część skryptu, działa normalnie.
Czy wiesz, dlaczego tak się dzieje? Jak tego uniknąć / czegoś innego powinienem używać?
PS
Program serwera może nasłuchiwać ^C, co może być problemem; czy mogę coś zrobić, aby temu zapobiec? Na przykład, kiedy po prostu biegam {SERVERCOMMAND}sam (w sposób blokujący), mogę nacisnąć ctrl+ c, co nie natychmiast go zabije; drukuje Received ^C signal, shutting down(a następnie sam się zabija). To co się dzieje, kiedy ^Cw less(A końcowy Received ^C signal, shutting downjest zapisywane w dzienniku).
PPS
Próbowałem wielu rzeczy (nic nie działało);
próba odłączenia stdin od skryptu poprzez zmianę
nohup {SERVERCOMMAND} > currentOutput.log 2>&1 & to nohup echo '' | {SERVERCOMMAND} > currentOutput.log 2>&1 & or nohup cat /dev/null/ | {SERVERCOMMAND} > currentOutput.log 2>&1 &używając
stty intr ^Gdo zastąpienia polecenia przerwania, ale ctrl+ gi tak zrobił dokładnie to, co^Crobił (więc może to być problem z moim emulatorem terminala;konsole)umieszczanie linii
nohupi / lublesswiersza w nawiasach (aby była to podpowłoka)uruchamianie skryptu
xtermzamiastkonsole
nohupzapobiega odbiorze SIGHUPsygnału przez proces , podczas gdy CTRL + C wysyła SIGINTsygnał. Dlatego nohupnie ma oczekiwanego efektu.
I think it is due to the handling within the database software, not on the shell. Jak miałby to zrobić program? Jak więc mogę to zatrzymać?