可能的原因可能会阻止Linux上的虚拟终端?

可能的原因可能会阻止Linux上的虚拟终端?,第1张

概述或者是否有可能某些进程或其他东西可以阻止虚拟终端?或者在尝试访问VT1时应用程序挂起的原因是什么? 看来,虽然这种情况正在发生,但它仍然悬挂在函数ioctl中.特别是,这是失败的代码: int vtno = 1;const char* vtname = "/dev/tty1";int fd = open(vtname, O_RDWR|O_NDELAY, 0);if (ioctl(fd, 或者是否有可能某些进程或其他东西可以阻止虚拟终端?或者在尝试访问VT1时应用程序挂起的原因是什么?

看来,虽然这种情况正在发生,但它仍然悬挂在函数ioctl中.特别是,这是失败的代码:

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: %s\n",strerror(errno));if (ioctl(fd,VT_WAitacTIVE,vtno) < 0)  printf("VT_WAitacTIVE Failed: %s\n",strerror(errno));

它挂在第二个ioctl.当我打断它时,我收到这条消息:

VT_WAitacTIVE Failed: Interrupted system call

而且,当它在那里等待时,如果我从另一个终端执行chvt 1,那也会挂起.

解决方法 我发现了问题. linus Torvalds在类似的情况下首先有 described it.它实际上是 race condition.

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

嗯,这解释了一个部分.它没有解释为什么chvt 1也悬挂了.

总结

以上是内存溢出为你收集整理的可能的原因可能会阻止Linux上的虚拟终端?全部内容,希望文章能够帮你解决可能的原因可能会阻止Linux上的虚拟终端?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1018372.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存