将作业置于后台而不冻结

use*_*329 9 bash

说你这样开始工作

foo
Run Code Online (Sandbox Code Playgroud)

然后希望你想把它放在背景中。键入Ctrl+Z然后bg就可以了,但会fooCtrl+Z和之间冻结bg。如何在不先冻结的情况下将 foo 放在后台?

l0b*_*0b0 6

&在命令 ( ) 之后添加一个符号foo &将立即将其背景化。但我相信,在标准终端/shell 配置中,一旦某些内容被置于前台,就无法立即将其置于后台。


use*_*ser 3

从技术上讲foo已经在后台运行。foo您可以启动第二个终端会话,第一个终端会话将在您执行其他操作时继续运行。

在 X 中,这仅涉及启动第二个终端应用程序,或者打开另一个选项卡(如果您选择的终端仿真器具有此类功能)。

在控制台上,如果您没有计划,则需要切换到不同的虚拟终端并再次登录。

screen如果您使用类似或 之类的终端多路复用器,tmux您可以在其中启动另一个会话。例如,在 screen 中,这是通过使用Ctrl+A后紧跟Ctrl+来完成的C。要在它们之间切换,请使用 Ca Cn 和 Ca Cp 在终端会话之间来回切换。

  • 这个答案似乎是基于对后台作业概念的误解。终端有一个“前台进程组”属性,通常由 shell 设置,这使得该组中的进程能够从终端读取数据并接收与 tty 相关的信号,例如 SIGINT。所有在终端上运行的不属于前台进程组的进程都是后台进程。当您创建新终端时,原始终端的前台作业仍然是该终端上的前台作业,即使您没有查看它。 (3认同)
  • 我的观点是,当问题特别提到“背景”和“工作”这两个词时——这两个词都是技术术语,其含义由 POSIX 进程组框架定义——以及 Ctrl-Z 和 bg 的机制,这两个词对进程组进行操作 - 您的答案表明根本不使用进程组功能,并且您使用“背景”一词的方式与其实际定义不符 - 您的答案不适合问题。首先,“从技术上讲,‘foo’已经在后台运行了”……只是……不。从技术上讲。 (3认同)