将 GNU screen 中启动的程序移至另一个终端

将 GNU screen 中启动的程序移至另一个终端

我想终止 GNU 的一个实例,screen同时保留其中运行的进程。

于是我打开了我常用的终端仿真程序并执行了 screen。然后我使用该实例screen执行./script_x.sh。现在,无论出于什么原因,我想退出使用,screen但是script_x.sh它尚未完成其任务,我不愿意放弃我的进度。

我可以保持活动进程处于活动状态以便在我的常规终端仿真器中继续工作吗?

答案1

TLDR:实际答案:不。

较长的答案:

理论上可以。 如果如果你从屏幕内部启动了类似程序nohup myprog &,它将继续运行。它会忽略挂断信号,不会有任何输入,但理论上你可以继续使用它。

但实际上并非如此。因此,除非您想将调试器附加到正在运行的进程并重写其文件句柄,并确保进程在您关闭屏幕时处理 -1 信号...否则答案是否定的。

如果你准备好这样做了,我家里有一个指向 [SU] 的书签有人就是这么做的。为了精彩而保存,而不是因为它很容易或微不足道。

答案2

您可以尝试使用reptyr将正在运行的应用程序重新连接到不同的终端。但是,将进程发送到后台时会出现一些问题。

我刚刚测试了它(htop在里面启动screenreptyr将其移到另一个终端,然后杀死screen),它似乎工作正常。但这仍然是一个非常棘手的解决方案,因此无法保证。

答案3

是的(如果“杀戮”不是真正的杀戮),这实际上正是屏幕的用途。您应该查看手册并尝试以下哪一种适合您的需求:

C-a d
C-a C-d     (detach)      Detach screen from this terminal.

C-a D D     (pow_detach)  Detach and logout.

然后,您将需要屏幕的 -D/-d -R/-r 命令行选项,具体取决于您的选择。

相关内容