筛选正在运行的进程

Lir*_*una 24 linux shell migration process gnu-screen

有时我忘记在 screen 会话下运行一个程序并且不能在中间停止它,我知道这将需要很长时间。

有没有办法在不重新启动的情况下筛选已经运行的进程?

war*_*ren 12

Earl在 serverfault 上找到了这个答案:

但是,对于您的实际问题,您还可以尝试另一件事:从终端启动您的工作后,输入ctrl-z然后输入背景bg
之后,将作业与它的父 shell 分离 - in bash: disown -h %<jobid>。之后,您可以安全地关闭终端,作业将继续运行。

这个来自Rob Wells的同一个问题:

$ screen -S my_process
$ retty $(pgrep my_process)
/redraw


Lir*_*una 7

ServerFault 中发现重复。

该帖子中未找到的另一个解决方案是在启动屏幕会话后使用retty

  • 我删除了我的答案;您可以(并且应该)在 2 天后接受您自己的答案。随意引用这里的相关部分,因为跨站点的“重复”确实不是由于受众不同而造成的。 (5认同)
  • 但是您没有按照杰夫的建议引用相关部分。=) (4认同)

Dav*_*ton 5

看看reptyr,它就是这样做的。github 页面包含所有信息。

reptyr - 一个用于“重新连接”的工具

程式。

reptyr 是一个实用程序,用于获取现有正在运行的程序并将其附加到新终端。通过 ssh 启动了一个长时间运行的进程,但必须离开并且不想中断它?只需启动一个屏幕,使用 reptyr 抓取它,然后终止 ssh 会话并回家。

用法

爬虫PID

“reptyr PID”将获取 id PID 的进程并将其附加到您当前的终端。

附加后,该进程将从新终端获取输入并将输出写入新终端,包括 ^C 和 ^Z。(不幸的是,如果您将其作为后台处理,您仍然需要在旧终端中运行“bg”或“fg”。如果不修补您的 shell,这可能无法以合理的方式修复。)