微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

什么可能的原因可以阻止在Linux上的虚拟terminal?

还是有可能一些进程或其他东西可以阻止虚拟terminal? 或者当尝试访问VT1时应用程序挂起的原因是什么?

看来,这一切正在发生,它挂在functionioctl 。 尤其是,这是失败的代码

int vtno = 1; const char* vtname = "/dev/tty1"; int fd = open(vtname,O_RDWR|O_NDELAY,0); if (ioctl(fd,VT_ACTIVATE,vtno) < 0) printf("VT_ACTIVATE Failed: %sn",strerror(errno)); if (ioctl(fd,VT_WAitacTIVE,vtno) < 0) printf("VT_WAitacTIVE Failed: %sn",strerror(errno));

它挂在第二个ioctl 。 当我打断它的时候,我收到了这个消息:

VT_WAitacTIVE Failed: Interrupted system call

另外,当它在那里等待时,如果我从另一个terminal执行chvt 1 ,那也挂起。

将控制台输出redirect到unix中的文件

如何将命令提示符的输出redirect到Windows上的DebugView?

如何检测控制台或Windows应用程序?

有没有办法使c + +控制台文本更大?

通过编辑服务器代码捕获node.js中的控制台输出

如何在不使用C中的system()的情况下清除win32 cmd控制台窗口?

如何使程序不显示控制台窗口?

我怎样才能列出Linux上的命令行(控制台模式)upnp服务器/渲染器?

如何在控制台应用程序中使用GetMessage()在Windows API中识别C ++中的键盘input?

如何判断是否在Linux控制台运行与ssh会话?

我发现了这个问题。 Linus Torvalds首先在类似的情况下描述了它 。 这实际上是一个竞赛条件 。

问题如下:如果恰好在第一个ioctl(fd,VT_ACTIVE,1)成功后,即系统切换到第一个VT,另一个单独的进程切换到另一个VT,则第二个ioctl将失败(或只是等待永远,即挂起),因为它等待我们切换到VT1,我们不会再做(除非用户正在做)。

那么,这解释了一部分。 这并不能解释为什么chvt 1也挂了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐