如何在Linux中从另一个终端访问正在运行的进程?

14
我想知道在Linux上如何通过终端访问或控制其他终端正在运行的进程的步骤。
  • 两个终端都属于同一系统。

定义“some other terminal”,是指同一台计算机吗?服务器? - John Riselvato
就像JosephH所说,这取决于你所说的“获得控制”是什么意思。 - Noufal Ibrahim
1
没有办法控制已经运行的某个进程。最相似的方法是使用screen,如abhi_ksd所描述的那样。 - salva
2
鉴于@onionjake的回答,这是一个很好的问题。 - Jonathan
4个回答

18

也许您想要像 reptyr 这样的东西?(https://github.com/nelhage/reptyr)

您只需输入reptyr PID来“控制”另一个进程(如vim或其他进程)。

编辑:

这个问题提供了更多有关使用screen或类似reptyr工具的信息。


3
+1 我刚刚尝试了这个,感觉很棒!我需要在Debian上安装它(sudo apt-get install reptyr),但是我能够“重新父进程”或接管已经运行的进程。比起screen更好,因为该进程无需使用任何特殊方法启动(我在桌面上启动它,然后通过另一系统的SSH终端接管它)。 - Jonathan

3
使用 screen 实用程序从终端启动任何进程,这样您就可以从任何其他终端本地或远程访问同一进程。例如:

从第一个终端

  1. 使用 screen -dR test 启动屏幕并按下 Enter,您将在屏幕内获得 shell。
  2. 在此处运行您的程序

从第二个终端

  1. 使用 screen -x test 进入现有屏幕

现在您应该能够看到在第一个终端上运行的进程,并完全控制该进程。

您可以深入了解 screen 实用程序...它是任何系统管理员非常有用的工具。

希望以上提示对您有所帮助。


所以如果您没有使用screen启动进程,那么基本上就无法控制它并将其带到前台。 - logicbloke

0

我们在谈论SSH吗?如果是这样...

  • SSH到运行进程的主机:

    ssh user@host

    然后要查看主机上正在运行的进程,请键入:

    ps aux | less

获得控制?不太确定这是什么意思,但我会列出一些简单的命令。

  • 按“用户名”查看进程

    ps -u userName

  • 查找进程

    pgrep firefox

  • 结束一个进程

    例如:

    pidof firefox

    输出:(您的编号将不同。)

    2786

    现在结束:

    kill 2786

高级

  • 以树形结构显示正在运行的进程。

    pstree

  • 可能会对atop感兴趣。

    atop


-1

我知道这是一个旧的帖子。但是如果你想要一个Linux tty的副本,你可以使用conspyhttp://linux.die.net/man/1/conspy。它很小并且很容易编译,如果它还没有在你的发行版中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接