Аннотация: Как запустить интерактивную задачу в фоновом режиме?
Подробности: Я пытаюсь запустить этот простой сценарий под оболочкой пепла (Busybox) в качестве фоновой задачи.
myscript.sh &
Однако сценарий немедленно останавливается ...
[1] + Stopped (tty input) 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 (или вывод tty
)
2) Запуск блока, содержащего cat и netcat, в подоболочке с использованием (). Это может сработать, но тогда как получить PID кота?
К вам, эксперты ...
Проблема все еще существует. Простой тест для всех вас:
1) В одном терминале запустите netcat -l -p 11111 (без &)
2) В другом терминале запустите netcat localhost 11111 & (Через некоторое время это должно прекратиться с сообщением Остановлен (ввод TTY))
Как этого избежать?