[英]how can I communicate (eg. run commands via write) with a child process when execv(“/bin/sh”, NULL) was called in C?
[英]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发布。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.