繁体   English   中英

分叉进程中的bin / sh -i问题,错误:“无法访问tty,作业控制已关闭”

[英]Problem with bin/sh -i in a forked process, error: 'can't access tty, job control turned off'

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

如果我使用“ / bin / sh”启动它,并且一次从浏览器向其发送整个命令行,则它可以工作。 但是使用这种设计不是交互式的。

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

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

当准备好输入并可以正常工作时,它会显示“ $”,但是向其发送删除字符只会使它感到困惑,并且不能正确处理删除操作。 我不确定它是否处于交互模式。 当我输入'su root'时,出现错误“必须从终端运行”。

有什么想法我做错了吗?

PS:完成后,它将根据GPL发布。

对于交互模式,sh想要与终端或模拟一个终端伪终端 )的东西交谈,而不仅仅是直接IO管道。 考虑使用forkpty启动启动外壳程序的过程,并与该程序提供的流进行对话。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM