如何告诉屏幕会话重新生成其套接字?

如何告诉屏幕会话重新生成其套接字?

笔记:这里描述的情况与这个


我有几个仍然附着屏幕会话,但screen -list产生

% screen -list
No Sockets found in /tmp/uscreens/S-jones.

我尝试SIGCHLD向屏幕进程发送信号,并且还杀死了在它们下运行的一些外壳(希望这会导致内核向这些进程发送一些信号)。所有这一切背后的理论是,此类信号将导致screen在 下重新创建适当的套接字/tmp/uscreens。但这些都不起作用。

由于会议仍在进行中,我能做些什么吗在每个会话中让它重新生成适当的套接字?

答案1

当我进行更新以更改SCREENDIR多个活动会话的默认值时,就发生了这种情况。和你一样,我无法说服它重新生成 fifo(可能有一个错误报告值得在此处提交),所以我最终做的是使用雷普特尔转换与新会话相关的所有内容。这很乏味,但让我保持了我的状态(也学到了一些东西)。这是我使用的步骤;这可能可以简化或编写脚本:

  1. 找到你想要转换的屏幕PID,并获取其子进程列表(我用过pstree -ps $PID
  2. 对于每个子进程,获取其 PID 并...
    • 如果是贝壳的话...
      • 没有其他东西运行的情况下,reptyr $PID
      • 如果其中运行正常进程,则 SIGTSTP it(^z 或kill -TSTP $PID)、bgit、disown $PIDit 和reptyr $PID; fg
    • 如果有一个进程孩子们,reptyr -T $PID
    • 如果有正常流程的话reptyr $PID

这可能不是万无一失的,我最终得到了壳中壳之类的东西,但情况可能更糟。

相关内容