将在 GNU screen 中启动的程序移出到另一个终端

voi*_*ces 21 terminal xterm gnu-screen terminal-emulator terminal-multiplexer

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

所以我打开了我的常规终端模拟器程序并执行了 screen. 然后我用那个实例screen来执行./script_x.sh. 现在,无论出于何种原因,我想停止使用screenscript_x.sh尚未完成其任务,我不愿意放弃我的进步。

我可以让活动进程保持活动状态,以便在我的常规终端模拟器中继续处理它吗?

Hen*_*nes 31

TLDR:实用的答案:不。

更长的答案:

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

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

如果你准备好这样做,我在家里有一个书签指向 [SU]那里有人这样做了。保存是为了令人敬畏,而不是因为它很容易和微不足道。


ala*_*and 23

您可以尝试使用reptyr将已运行的应用程序重新附加到不同的终端。但是,将进程发送到后台存在一些问题。

我刚刚测试了它(从htop里面开始screenreptyr它到另一个终端,kill screen),它似乎工作正常。这仍然是一个非常hacky的解决方案,所以不能保证。


Gom*_*dor 14

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

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

C-a D D     (pow_detach)  Detach and logout.
Run Code Online (Sandbox Code Playgroud)

然后你需要的是 -D/-d -R/-r 命令行选项 screen,这取决于你的选择。

  • @GuntramBlohm OP 了解屏幕的工作原理完全不清楚,这是最有可能的预期效果。 (11认同)
  • 是的,他写了那个,但我不确定他问他想要什么。 (6认同)
  • 您是否知道 screen 不是与 xterm 不同的终端,而是在将其与任何其他终端分离后可以附加到您的真实终端(vterm、xterm、terminator、(m)rxvt、任何)的层(伪终端)?screen 是让您的进程运行的原因,您在 screen 内启动它(并且它做得很好)。如果你杀死(真的杀死)屏幕,那么你从你的过程中拉出地毯......我只是看不出你为什么要这样做的任何充分理由。 (2认同)