为什么我无法附加屏幕会话

为什么我无法附加屏幕会话

我有一个正在运行的屏幕会话,我想退出,但我不能,因为当我尝试重新连接时,我收到一条错误消息,说它无法打开我的终端。我确信我可以杀死守护进程或做其他事情,但我需要学习“正确”的方法,以及实际发生了什么。

 daniel@DELIRIUM:~/server1/bin/plugins$ screen -list
 There is a screen on:
        1424.pts-0.DELIRIUM     (06/23/2011 01:18:14 PM)        (Detached)
 1 Socket in /var/run/screen/S-daniel.

 daniel@DELIRIUM:~/server1/bin/plugins$ screen -r 1424
 Cannot open your terminal '/dev/pts/0' - please check.

另外,什么是套接字?你越能简化它越好。

答案1

由于某种原因,您不拥有您的 TTY。您是否曾经su从其他用户更改为该用户?通常,TTY 归最初登录该终端的人所有。

有一个巧妙的技巧可以解决这个问题(除了更改最初登录的用户对 /dev/pts/0 文件的权限之外),该bsdutils软件包中有一个名为的程序script,它在运行时会像键盘记录器一样工作,保存您输入的内容和程序打印的内容。它会启动另一个 shell 并为该 shell 分配另一个伪终端以记录所有这些内容,因此如果您运行它,script /dev/null它将创建一个具有适当权限的新伪终端,并开始将其上的所有内容记录到 /dev/null。然后您将能够使用 screen 重新连接您的会话。

至于“套接字”,这是 Screen 对命名管道文件(也称为 FIFO)的称呼/var/run/screen/S-username,例如

prw------- 1 derf derf 0 Jun 23 22:42 30029.pts-0.server

当您第一次启动屏幕时,会创建此管道文件,以便将screen您用来查看显示的进程与程序实际运行的后台screen进程(通常重命名)连接起来。当您运行时,您正在运行的屏幕进程将打开此管道以与后台屏幕进程对话。SCREENscreen -r

答案2

这里发生了一些奇怪的事情。您能否粘贴以下输出:

   ls -l /dev/pts/0
   id

在这种情况下,套接字是一种进程间通信形式,它是文件系统上的文件,在进程与其他进程之间形成通道。因此,您的屏幕“客户端”正在与其他正在运行的屏幕实例对话,这就是屏幕的神奇之处。套接字在 Linux 中是令人困惑的概念,因为传统上人们认为套接字一词的意思是网络套接字。这是一个很难简化的概念,它适用于一系列其他进程间通信通道,最好由“UNIX 环境高级编程”一书解释。

相关内容