调用 forkpty 时 X 抛出错误。 (C++)

Posted

技术标签:

【中文标题】调用 forkpty 时 X 抛出错误。 (C++)【英文标题】:X throws out errors when forkpty is called. (C++) 【发布时间】:2010-01-30 20:52:23 【问题描述】:

当我的程序到达这一行时:

pid_t nPid = forkpty( &m_nMasterFD, NULL, NULL, NULL );

输出这个:

X Error: BadIDChoice (invalid resource ID chosen for this connection) 14
  Extension:    148 (RENDER)
  Minor opcode: 17 (RenderCreateGlyphSet)
  Resource id:  0x3600002
<unknown>: Fatal IO error 4 (Interrupted system call) on X server :0.0.

然后终止。如您所见,我正在尝试创建一个 pty 来运行东西,但它不起作用。

另外,有没有办法在类中调用forkpty()? (这两种方法我都试过了,但都没有成功。)

我在 Ubuntu 9.10 上使用 QT C++ 编程。

编辑:Here's 问题的链接以及最终对我有用的代码。

【问题讨论】:

【参考方案1】:

forkpty() 分叉你的进程。您需要首先关闭文件描述符,尤其是在您的子进程中与 X 服务器的连接。这意味着您可能无法使用 forkpty ,但必须使用 openpty()、fork()、关闭子进程中的文件描述符、logintty/()

【讨论】:

这不是O_CLOEXEC 的用途吗? 如果你 exec() 一个新程序,是的。在这种情况下,只有 fork()。 哦。不知怎的,我以为forkpty() 里面有一个最终的exec,但不,当然不是……

以上是关于调用 forkpty 时 X 抛出错误。 (C++)的主要内容,如果未能解决你的问题,请参考以下文章

C++:抛出异常会调用复制构造函数?

如何使用 Remote-SSH 修复 VS Code 错误:“终端进程无法启动:启动期间发生本机异常(forkpty(3)失败。)。”?

浅析c++异常

(c++) 在抛出一个实例后调用终止

从 C# 调用 C++ dll 并抛出 SEHException

c++ 中的错误:“在抛出 'std::length_error'what() 的实例后调用终止:basic_string::_M_replace_aux”