笔记:这里描述的情况与这个。
我有几个仍然附着屏幕会话,但screen -list
产生
% screen -list
No Sockets found in /tmp/uscreens/S-jones.
我尝试SIGCHLD
向屏幕进程发送信号,并且还杀死了在它们下运行的一些外壳(希望这会导致内核向这些进程发送一些信号)。所有这一切背后的理论是,此类信号将导致screen
在 下重新创建适当的套接字/tmp/uscreens
。但这些都不起作用。
由于会议仍在进行中,我能做些什么吗在每个会话中让它重新生成适当的套接字?
答案1
当我进行更新以更改SCREENDIR
多个活动会话的默认值时,就发生了这种情况。和你一样,我无法说服它重新生成 fifo(可能有一个错误报告值得在此处提交),所以我最终做的是使用雷普特尔转换与新会话相关的所有内容。这很乏味,但让我保持了我的状态(也学到了一些东西)。这是我使用的步骤;这可能可以简化或编写脚本:
- 找到你想要转换的屏幕PID,并获取其子进程列表(我用过
pstree -ps $PID
) - 对于每个子进程,获取其 PID 并...
- 如果是贝壳的话...
- 没有其他东西运行的情况下,
reptyr $PID
- 如果其中运行正常进程,则 SIGTSTP it(^z 或
kill -TSTP $PID
)、bg
it、disown $PID
it 和reptyr $PID; fg
。
- 没有其他东西运行的情况下,
- 如果有一个进程孩子们,
reptyr -T $PID
- 如果有正常流程的话
reptyr $PID
- 如果是贝壳的话...
这可能不是万无一失的,我最终得到了壳中壳之类的东西,但情况可能更糟。