在fork()
之后,我执行了一个setsid来创建一个新会话。但是当我这样做时,我不能使用像emacs这样的termcaps程序。
它会执行错误"emacs: Could not open file: /dev/tty".
如何恢复/ dev / tty上的控件?
答案 0 :(得分:1)
<强> TIOCSCTTY 强>
int arg
使给定终端成为呼叫的控制终端 处理。调用进程必须是会话负责人而不是 控制终端已经。如果这个终端已经是 控制不同会话组的终端然后ioctl失败 使用EPERM,除非调用者是root用户(更确切地说:具有 CAP_SYS_ADMIN能力)和arg等于1,在这种情况下终端 被盗,所有将其作为控制终端的进程都会丢失 它。
<强>空隙强>
如果给定的终端是呼叫的控制终端 过程中,放弃这个控制终端。如果进程是会话 领导者,然后将SIGHUP和SIGCONT发送到前台进程组 并且当前会话中的所有进程都失去了控制权 终端
很多警告都适用。阅读这篇标题为"Reptyr: Changing a Process's Controlling Terminal"的博文,并查看引用的代码。该代码将一个进程从一个终端移植到另一个终端,并且可以完全满足您的需求。