Проблема с bin / sh -i в разветвленном процессе, ошибка: «не удается получить доступ к tty, управление заданиями отключено» - PullRequest
0 голосов
/ 21 декабря 2009

Я пишу программу cgi-bin для моего Sheevaplug (с установленной по умолчанию установкой Ubuntu), которая отображает оболочку на странице браузера. Это отдельная программа на C, которая помещается в папку cgi-bin и просматривается в браузере. Он автоматически запускает демон, и демон разветвляет экземпляр оболочки. Cgi-bin связывается с демоном через блок совместно используемой памяти, а демон связывается с оболочкой, перенаправляя свой stdin / stdout на stdout / stdin оболочки. Когда вы покидаете страницу, она автоматически отключает демон.

Это работает, если я запускаю его с помощью "/ bin / sh" и посылаю целую командную строку за раз из браузера в него. Но используя этот дизайн, он не интерактивен.

Поэтому я изменил его, чтобы посылать символ за раз в "/ bin / sh", и добавил "-i", чтобы оболочка работала в интерактивном режиме.

Когда оболочка запускается, отображается сообщение об ошибке «Не удается получить доступ к TTY, управление заданиями отключено».

Затем он отображает '$', когда он готов к вводу и, кажется, работает, но отправка ему символов удаления просто смущает его, и он не обрабатывает удаление должным образом. Я не совсем уверен, в интерактивном режиме или нет. Когда я набираю 'su root', я получаю сообщение об ошибке "должен быть запущен из терминала".

Есть идеи, что я делаю не так?

PS: Когда я это сделаю, он будет выпущен под лицензией GPL.

1 Ответ

5 голосов
/ 21 декабря 2009

В интерактивном режиме sh хочет общаться с терминалом или чем-то, что имитирует один ( псевдотерминал ), а не только с прямыми каналами ввода-вывода. Попробуйте использовать forkpty для запуска процесса, из которого вы запускаете оболочку, и общения с потоками, предоставленными этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...