分叉过程中bin / sh -i出现问题,错误:'无法访问tty,关闭了作业控制'

时间:2009-12-21 00:16:31

标签: c linux shell fork

我正在为我的Sheevaplug(运行默认的Ubuntu安装)编写一个cgi-bin程序,该程序在浏览器页面中显示一个shell。它是一个单独的C程序,放在cgi-bin文件夹中并在浏览器中查看。它会自动启动一个守护进程,守护进程会分配一个shell实例。 cgi-bin通过共享内存块与守护进程通信,守护进程通过将其stdin / stdout重定向到shell的stdout / stdin来与shell通信。离开页面时,它会自动关闭守护程序。

如果我使用“/ bin / sh”启动它并且我一次从浏览器向它发送一个完整的命令行。但是使用这种设计并不是互动的。

因此我将其更改为一次发送一个字符到“/ bin / sh”并添加“-i”,以便shell以交互模式运行。

当shell启动时,它会显示错误“无法访问TTY,关闭作业控制。”

然后当它准备好输入时显示'$'并且似乎有效,但是向它发送删除字符只是混淆它并且它没有正确处理删除。我不确定它是否处于交互模式。当我输入“su root”时,我收到错误“必须从终端运行”。

任何想法我做错了什么?

PS:当我完成它时,它将在GPL下发布。

1 个答案:

答案 0 :(得分:5)

对于交互模式,sh想要与终端或模拟一个(pseudo-terminal)的终端进行通信,而不仅仅是直接的IO管道。考虑使用forkpty启动从中启动shell的过程,并与之提供的流进行对话。