gpt4 book ai didi

c - fork 进程中 bin/sh -i 的问题,错误 : 'can' t access tty, 作业控制已关闭'

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:27 26 4
gpt4 key购买 nike

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

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

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

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

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

知道我做错了什么吗?

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

最佳答案

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

关于c - fork 进程中 bin/sh -i 的问题,错误 : 'can' t access tty, 作业控制已关闭',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1937595/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com