Streszczenie: Jak uruchomić interaktywne zadanie w tle?Użycie programu netcat/cat w tle skryptu powłoki (jak uniknąć zatrzymania (wejście tty)?)
Szczegóły: Próbuję uruchomić ten prosty skrypt pod powłoką popielnika (Busybox) jako zadanie w tle.
myscript.sh &
Jednakże skrypt zatrzymuje się natychmiast ...
[1] + zatrzymany (wejście terminal) myscript.sh
myscript .sh contents ... (tylko część relvant, inna niż pułapka SIGINT, SIGHUP itd.)
#!/bin/sh
catpid=0
START_COPY()
{
cat /dev/charfile > /path/outfile &
catpid = $!
}
STOP_COPY()
{
kill catpid
}
netcat SOME_IP PORT | while read EVENT
do
case $EVENT in
start) START_COPY;;
stop) STOP_COPY;;
esac
done
Z prostych testów linii poleceń dowiedziałem się, że bot cat i netcat próbują odczytać z tty. Należy zauważyć, że ta wersja netcata nie ma znaku-e, aby pominąć tty.
Co można zrobić, aby uniknąć zatrzymania myscriptu?
Czego próbowałem tak za bez powodzenia:
1) netcat/kot ... </dev/tty (lub wyjście tty
)
2) Prowadzenie blok zawierający kota i netcat w podpowłoce za pomocą(). To może zadziałać, ale jak złapać PID kota?
do ciebie ekspertów ...
Problem nadal istnieje. Prosty test dla was wszystkich, aby spróbować:
1) W jednym terminalu run netcat -l -p 11111 (bez &)
2) W innym terminalu run netcat localhost 11111 & (ta powinna zatrzymać po z komunikatem Zatrzymane (wejście TTY))
Jak tego uniknąć?
Koniec z ekspertami? Dowolny pomysł? – LovelyVirus
Jeśli masz problemy z przechwytywaniem danych wejściowych i wyjściowych z podprocesu, możesz użyć 'script'. Jeśli to nie zadziała, możesz spróbować poznać ['socat'] (http://www.dest-unreach.org/socat/doc/socat.html); ma zaawansowaną obsługę PTY, ale nie mogłem wymyślić, jak go zdobyć, aby przechwycić STDIN. –
Illusatration jest częścią skryptu, który nie działał. socat nie jest opcją dla środowiska, które mam (nie mogę go tam dostać). Zmęczony, aby przekierować/dev/ttyS0 do netcat i wydaje się działać, ale przestaje odbierać sygnały. – LovelyVirus