Аннотация: Как запустить интерактивное задание в фоновом режиме?
Подробно: я пытаюсь запустить этот простой сценарий в Ash Shell (Busybox) в качестве фонового задания.
myscript.sh &
Однако скрипт немедленно останавливается ...
[1] + Остановлен (ввод tty) myscript.sh
Содержимое myscript.sh ... (только соответствующая часть, за исключением того, что я перехватываю SIGINT, SIGHUP и т. Д.)
#!/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
Из простых тестов командной строки я обнаружил, что бот cat и netcat пытаются читать из tty,Обратите внимание, что в этой версии netcat нет -e для подавления tty.
Теперь, что можно сделать, чтобы избежать остановки myscript?
Вещи, которые я пытался сделать так без какого-либо успеха:
1) netcat / cat ... </ dev / tty (или вывод <code>tty)
2) Запуск блока, содержащего cat и netcat, в подоболочке с помощью ().Это может сработать, но как тогда получить PID кошки?
Перед вами эксперты ...
Проблема все еще существует.Простой тест для всех вас:
1) В одном терминале запустите netcat -l -p 11111 (без &)
2) В другом терминале запустите netcat localhost 11111 & (Это должно сделатьчерез некоторое время остановить с сообщением Остановлено (ввод TTY)
1037 * Как этого избежать?