假设你这样开始工作
foo
然后希望你想把它放在背景中。输入Ctrl+Z然后就bg可以解决问题,但会foo
在Ctrl+Z和之间冻结bg。如何在不先冻结 foo 的情况下将其放置在后台?
答案1
&
在命令 ( ) 之后添加一个符号foo &
将立即将其背景化。但我相信没有办法标准终端/shell 配置,用于后台某些内容立即地一旦它被前景化。
答案2
从技术上讲foo
已经在后台运行。您可以启动第二个终端会话,第一个终端会话将foo
在您执行其他操作时继续运行。
在 X 中,这仅涉及启动第二个终端应用程序,或者打开另一个选项卡(如果您选择的终端仿真器具有此类功能)。
在控制台上,如果您没有计划,则需要切换到不同的虚拟终端并再次登录。
screen
如果您使用类似或 之类的终端多路复用器,tmux
您可以在其中启动另一个会话。例如,在 screen 中,这是通过使用Ctrl+A后紧跟Ctrl+来完成的C。要在它们之间切换,请使用 Ca Cn 和 Ca Cp 在终端会话之间来回切换。
答案3
将应用程序从前台发送到后台需要终端和 shell 的配合。终端不能单独完成,因为shell必须设置前台进程组。 shell 无法单独完成此操作,因为终端必须处理按键(shell 不在前台,因此它无法接收按键)。
我有一个zsh配置我可以快速连续按两次Ctrl+ ;Z第一次按会暂停该过程,第二次按会在后台恢复该过程。我不知道如何将其移植到 bash。
如果您在允许注入击键的终端模拟器中运行,则可以注入^Zbg^M
(使用^
控制字符的符号)。例如,对于 X11 终端仿真器,请运行,xdotool --window 1234 Ctrl_L+Z b g Return
其中 1234 是终端仿真器的窗口 ID。对于 Screen,运行screen -S foo -p 12 -X stuff $'\032bg\r'
其中foo
是屏幕会话的名称,12
是窗口 ID。
答案4
如果您的输入对于这种情况来说不够快,则从kill -s SIGSTOP 1023 && kill -s SIGCONT 1023
另一个 shell 运行,假设 1023 作为目标 PID。
免责声明:如鲁斯兰可能知道,该序列实际上会如此快地重新启动作业,bash
而不会注意到它。