可能的重复:
如何暂停后台进程并将其置于前台
我有一个以前从未遇到过的奇怪问题。这就是我所做的:
我开始了一个应用程序./myApp
。
没有命令行参数,没有&
让它在后台运行。
不幸的是,我的系统在某个时候死机了。无法通过 GUI 进行访问,因此我决定首先停止所有 CPU 密集型任务。所以我提出了一个tty
(Ubuntu上的快捷方式Ctrl++ Alt)并在获得了with的权利后执行了。F2kill -STOP pid
pid
myApp
top
幸运的是,经过一些额外的时间,系统解冻了。所以我用 重新启动了该过程kill -CONT pid
。
但这是我在终端中看到的:
[2]+ Stopped ./myApp
现在终端处于应用程序未运行的状态(即我可以执行ls
或任何我喜欢的操作),但进程管理器仍然报告应用程序正在运行。我很高兴这样做,因为我会损失 34 小时的计算时间(是的,这是一个非常糟糕的应用程序;当然不是我写的),因为根本没有输出要归档。
当应用程序的繁重任务完成时(预计在几个小时内),我需要在应用程序内部输入特定任务以使其写入文件(这有点像自定义 shell 提示输入,所以我猜cin
正在使用中)。
所以问题是:如何让我回到应用程序,以便我看到它的输出并可以与其交互?如果不可能:是否可以流式传输到应用程序并启动所需的命令而无需重新启动应用程序?
更新应用程序仍然输出到完全相同的终端。
仅供参考,您可能需要它:我正在运行内核为 3.2.0-36 的 Ubuntu x86
答案1
我不相信可以将控制台重新连接到没有关联的 psuedo-tty 的进程。
对于未来需要保持与控制台连接的情况,请尝试使用screen
.
Screen 是一个设计用于在 shell 的特定实例和本地终端之间进行交互的工具。通过成为中间人,您可以从正在运行的进程中分离并稍后重新连接到它。如果您的 Internet 连接不可靠,如果您使用 SSH 进行系统管理,或者在像您这样的具有长时间运行进程的实例中,这非常有用。
当您打开终端(无论是在 GUI 中还是在真实的 tty 之一)时,只需键入screen
。 Ubuntu 中应该默认安装它。屏幕会提醒您它正在运行默认 shell 以及如何查找帮助。然后它将运行您的登录 shell 并远离。
在最基本的用法中,您可以使用Ctrl-A
, 后跟来D
从当前会话中分离。要重新连接到该会话,请使用:screen -r <complete name of session>
。如果您记不起会话名称,-ls
命令开关将提供有关哪些会话可用的详细信息。
Screen 可以做的事情太多了,以至于我没有太多机会使用,但几年前,Digium 支持人员帮助我使用反向 SSH 连接和多用户模式下的 Screen 配置了他们的一个模拟 POTS 接口卡。这使他们能够安全地访问我的 Asterisk 服务器,而无需他们知道密码,并且我能够审核正在执行的操作。