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

什么可能的原因会阻止Linux上的虚拟终端?,linux,console,ioctl,tty,Linux,Console,Ioctl,Tty,或者某个进程或其他东西可能会阻止虚拟终端吗?或者,在尝试访问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:

或者某个进程或其他东西可能会阻止虚拟终端吗?或者,在尝试访问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));

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

我发现了问题。莱纳斯·托瓦尔兹首先遇到了类似的情况。这实际上是一个错误

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


好吧,这就解释了一部分。它没有解释为什么
chvt 1
也挂起

VT_WAITACTIVE failed: Interrupted system call