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


21

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

因此,我打开了常规的终端仿真器程序并执行了屏幕。然后,我使用的实例screen执行./script_x.sh。现在,无论出于何种原因,我都想退出使用,screenscript_x.sh尚未完成任务,并且我不愿意放弃自己的进步。

我可以保持活动进程的生命,以便继续在常规终端仿真器中对其进行处理吗?


14
您是真的要杀死屏幕还是要脱离屏幕?屏幕旨在用于在后台运行进程,以便您可以继续进行正常的会话,还允许应用程序在注销后继续运行(例如,断开SSH会话)。您始终可以脱离屏幕,继续进行正常的会话,然后从屏幕会话中离开的地方继续接听。您的终端仿真器与此无关。
BlueCacti

或者只是在screen会话内创建另一个屏幕。
chrylis -strike

11
这个问题闻起来像XY问题
数字克里斯

7
@ tjt263-您说您一开始就对使用屏幕感到后悔,如果不使用屏幕,您将如何保持进程运行呢?您仍然可以对屏幕中的进程执行相同的操作,但是屏幕的另一个优点是您可以与之分离并让您的进程不受干扰地运行。
约翰尼

@DigitalChris现在可能会做。我觉得原始标题可能更有意义。有3个不同点:我正在内部运行一个程序screen。我想停止使用screen。我不想停止正在运行的程序screen。而已。我不知道如何澄清这种情况,或者比这更简单的表达。
声音

Answers:


31

TLDR:实用答案:否。

更长的答案:

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

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

如果您准备好执行此操作,则我在家中会有一个书签,指向[SU] 某人刚在此做的书签。之所以保存下来,是因为它很棒,而不是因为它简单而琐碎。


请注意,自您回答以来,该问题已被大量编辑。
chrylis-罢工时-16年

断开进程的连接非常简单-这是设置进程组(带有disown或处于较低级别)的问题,以便SIGHUP在父进程死后不会发送任何消息。重新连接I / O完全是另一回事-这是调试器的用武之地
。– Alexis

你并不需要nohup,如果你是在一个作业控制Shell(如bashkshcshzshash,等)。如果您仍在使用像Bourne这样的非作业控制外壳,sh也许是时候进行升级了。
小鸡

23

您可以尝试使用reptyr将已经运行的应用程序重新连接到其他终端。但是,将流程发送到后台存在一些问题。

我刚刚对其进行了测试(从htop内部启动screenreptyr到另一个终端,杀死screen),它似乎可以正常工作。仍然是一个非常棘手的解决方案,因此无法保证。


1
比使用gdb更少hacky :)
Hennes

14

是的(如果“杀死”不是真正的杀死),那实际上就是屏幕的用途。您应该查看手册,并尝试其中哪一种符合您的需求:

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命令行选项,具体取决于您的选择。


1
这不能回答问题。OP不想脱离屏幕,他们想终止屏幕过程。
Guntram Blohm

6
是的,他写道,但是我不确定他问他想做什么。
GombaiSándor16年

11
@GuntramBlohm尚不清楚OP是否了解屏幕的工作原理,这是最有希望的效果。
chrylis -strike

2
您是否知道屏幕不是与xterm不同的终端,而是可以将其与其他终端分离后可以连接到您的实际终端(vterm,xterm,终结器,(m)rxvt等)的层(伪终端)吗?屏幕是保持您的进程运行的一个因素,您可以在屏幕内部启动它(并且效果很好)。如果您杀死(真的杀死了)屏幕,那么您会从过程中拉出地毯……我只是看不出有什么理由这样做。
GombaiSándor16年

1
@GombaiSándor:一个理由是这样做,这将是使这一过程谈话直接到终端,以通过能力,画面不知道。例如,我曾经破解过自己的xterm版本,以使键盘上所有怪异的功能键都发送包含X11键符和完全修饰符状态的转义序列,而不是假装它是VT102,然后开始安装他们在emacs中的键盘绑定。这些序列不会毫无伤害地通过屏幕。
Henning Makholm '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.