有没有办法重新安装在/ tmp / uscreens / …中没有命名pipe道的屏幕会话?

我很难重新连接到屏幕会话,所以我试图杀死客户端屏幕会话并重新连接到服务器会话。 这失败了。 然后,我做了一些有点愚蠢的事情。 我做了一个 – 抹。 现在我在/tmp/uscreens/...目录下没有命名的pipe道文件。

屏幕服务器仍在运行,我想知道是否有可能重新创build命名pipe道。

我使用Win7家庭高级版下运行的屏幕版本4.00.03(FAU)23-Oct-06在cygwin下运行。 虽然我可以从杀死屏幕服务器和它的孩子恢复,我宁愿不要。

有任何想法吗?

编辑 :这是从我的FD目录列表:

  $ ls -l / proc / 8728 / fd /
总计0
 lrwxrwxrwx 1 Adrian None 0 5月12日22:32 0  - > / dev / null
 lrwxrwxrwx 1 Adrian None 0 5月12日22:32 1  - > / dev / null
 lrwxrwxrwx 1 Adrian None 0 5月12日22:32 10  - > / dev / ptmx
 lrwxrwxrwx 1 Adrian None 0 5月12日22:32 11  - > /cygdrive/c/Users/Adrian/Downloads/arduino-1.0.3-windows/Projects/RangeDetector5/screenlog.2
 lrwxrwxrwx 1 Adrian None 0 5月12日22:32 2  - > / dev / null
 lrwxrwxrwx 1 Adrian None 0 5月12日22:32 3  - > /tmp/uscreens/S-Adrian/8728.pty0.TARDIS
 lrwxrwxrwx 1 Adrian None 0 5月12日22:32 4  - > / dev / pty0
 lrwxrwxrwx 1 Adrian None 0 5月12日22:32 5  - > / var / run / utmp
 lrwxrwxrwx 1 Adrian None 0 5月12日22:32 6  - > / dev / ptmx
 lrwxrwxrwx 1 Adrian None 0 5月12日22:32 7  - > /cygdrive/c/Users/Adrian/Downloads/arduino-1.0.3-windows/Projects/RangeDetector5/screenlog.0
 lrwxrwxrwx 1 Adrian None 0 5月12日22:32 8  - > / dev / ptmx
 lrwxrwxrwx 1 Adrian None 0 5月12日22:32 9  - > /cygdrive/c/Users/Adrian/Downloads/arduino-1.0.3-windows/Projects/RangeDetector5/screenlog.1

这里的情况:

 start cmd: # ps -o pid,args -p 4629 --no-headings 4629 SCREEN start cmd: # ls -l /proc/4629/fd | grep socket lrwx------ 1 root root 64 13. Mai 02:55 4 -> socket:[90202] start cmd: # lsof -n | grep 90202 screen 4629 [...] 90202 /var/run/screens/S-root/4629.pts-12.inno 

我想你已经删除了相当于我的/var/run/screens/S-root/4629.pts-12.innols -l /proc/$PID/fd可能仍然指向套接字节点。 如果你删除了文件,那么只要进程保持打开状态,你就可以通过/proc/$PID/fd获取它们的内容。 我不熟悉套接字,但至less可以尝试一下:你可以创build一个指向/proc/$PID/fd的套接字描述符的符号链接(而不是被删除的套接字)。

编辑1:

因为客户端进程可能会检查文件的types并find它期望套接字的地方,并因此中止而不检查符号链接目标,所以可能不足以设置套接字的符号链接。

这个问题也许可以用socat来解决。 这个程序允许“套接字转发”。 我刚刚testing过(用gpg-agent而不是screen ,而原来的套接字没有被删除):

 start cmd:> echo $GPG_AGENT_INFO /tmp/gpg-DMOHGo/S.gpg-agent:3236:1 # next command in another shell start cmd:> socat UNIX-LISTEN:gpg-agent-socket UNIX-CONNECT:/tmp/gpg-DMOHGo/S.gpg-agent start cmd:> GPG_AGENT_INFO=/home/hl/tmp/gpg-agent-socket:3236:1 start cmd:> start cmd:> gpg-connect-agent > 

这也可以在/proc使用socked FD。 此外,socat支持FIFO(命名pipe道)。

编辑2:

它也与FIFO一起工作:

 socat PIPE:/proc/8728/fd/3 PIPE:/tmp/uscreens/S-Adrian/8728.pty0.TARDIS 

应该做。

顺便说一句:即使这不能解决你的问题(但)我认为,我的答案的努力和质量至less应该值得upvote …