通过列出正在运行的作业并将作业 ID 赋予 ,可以将通过发出而进入睡眠状态的进程^Z
带回前台。但是当我尝试将工作单独列出时$ jobs
fg %id
屏幕同一终端没有结果。如何实现这一目标?
我想要的是启动相同的进程,而不在同一终端的单独屏幕中终止它。
答案1
你不能。 shell 作业(前台和后台进程)的处理由每个单独的 shell 实例完成。您无法将作业从一个交互式 shell 迁移到另一个交互式 shell,甚至不能之内就像是screen
。
终端与此实际上没有任何关系。它只运行外壳。
tmux
您可以做的是使用终端多路复用器(例如或 )迁移整个 shell 会话screen
。其中一个终端中的 shell 会话可以通过在一个终端中分离screen
或tmux
会话并在同一台计算机上的另一个终端中重新附加到它来移动到另一个终端。
这是通过tmux
首先启动tmux
,然后在会话内启动程序来完成的tmux
。当程序运行时,您可以按prefixd(默认prefix为Ctrl+B)来分离tmux
会话。然后在另一个终端中发出命令tmux attach
以恢复tmux
会话。也可以通过命令来完成分离tmux detach
。
screen
请参阅tmux
您的系统的手册。
答案2
终端是进程(例如 shell)的查看器。终端本身不运行任何命令 - 这就是 shell 的目的 - 但如果没有终端,您就无法与 shell 或其运行的任何程序进行交互。
通常,当您关闭终端窗口时,它会向 shell 发送一个信号,告诉它关闭,这又会杀死您可能在那里运行的任何进程。
您可以在 下运行进程screen
。其作用是创建一个“虚拟终端”供 shell 运行。您的“真实”终端窗口可以附加到该会话并控制所提供的screen
虚拟终端。screen
最终效果是,感觉完全正常,但您也可以脱离虚拟屏幕并让 shell 继续运行。
screen # Create a leader and a virtual terminal/screen running a shell
screen -ls # List sessions (attached/detached)
screen -r # Reattach to the single detached session
screen -r {identifier} # Reattach to the named detached session
screen -md {command...} # Make a new detached session running {command...}
最后,Ctrl Ad脱离当前会话并Ctrl A?获取交互式命令列表。