В настоящее время я запускаю фоновый процесс, запущенный процессом deamon. Он не имеет терминала и работает нормально, так как не имеет экранного ввода-вывода. Он запускается через скрипт оболочки, который я могу изменить. Сценарий оболочки наследует среду демона, устанавливает дополнительные переменные среды и, наконец, запускает программу через exec $PROG arg1 "arg 2" 1>&2
.
Для запуска этого в "режиме отладки" необходим ввод / вывод (режим curses).
Что я пробовал до сих пор:
exec screen -dmS FIXME $PROG arg1 "arg 2"
приводит к не запускающейся программе с сообщением об ошибке "неверный дескриптор файла"exec $PROG arg1 "arg 2" 1>/dev/pts/5
приводит к запуску программы, все выходные данные можно увидеть в /dev /pts /5, конечно, ввод невозможенexec $PROG arg1 "arg 2" 1>/dev/pts/5 <namedpipe
приводит к запуску программы, весь вывод можно увидеть в /dev /pts /5, получает ввод черезecho stuff > namedpipe
из другого сеанса, но это не может использоваться, так как все функциональные клавиши должны быть пригодными для использования.
"Очевидное" решение, о котором я подумал (но не получилось):
- запустить экран на другом экране консоли
screen -dmS "FIXME"
- разрешить фоновому процессу использовать этот сеанс экрана через
exec screen -S "FIXME" -X stuff "$PROG arg1 \"arg 2\" "
(необходим перевод строки, она эмулирует нажатие клавиши Enter ) - прикрепить к экрану через
screen -r "FIXME"
(присоединение работает)
Проблема здесь: Это только отправляет одну сессию в сеанс, который не работает, так как отсутствует полная среда (начиная с текущего каталога и далее со всеми переменными среды). [Редактировать: опубликовал возможное решение взломать как ответ (исходный вопрос до сих пор остается без ответа)]
Вопрос: можно ли запустить фоновый процесс с помощью экранной утилиты? (Лучшим вариантом будет, если новый сеанс экрана будет запущен из фонового процесса [проблема здесь: у этого процесса вообще нет консоли], и просто подключиться из другого окна.
Если это невозможно: есть ли другие обходные пути?