Answers:
从技术上讲,它foo已经在后台运行。您可以启动第二个终端会话,foo而当您执行其他操作时,第一个终端会话将继续运行。
在X中,这仅涉及启动第二个终端应用程序,或者如果您选择的终端仿真器具有这样的功能,则打开另一个选项卡。
在控制台上,如果您不打算这样做,则需要切换到其他虚拟终端,然后重新登录。
如果你使用一个终端复用器喜欢screen或者tmux你可以在它启动另一个会话。例如,在屏幕上,使用Ctrl+ A紧跟着Ctrl+ 来完成此操作C。要在它们之间切换,请使用Ca Cn和Ca Cp在终端会话之间来回切换。
foo 本身(缺少特定的检查,我想在野外介于稀有和不存在之间)不关心它是否在最顶部的窗口中运行,或者是否有显示其输出的东西。
foo已经在后台运行”开始...只是...不。
foo所以现在我该怎么办?”。如果您认为此答案(或其他答案)在回答问题时没有用,我鼓励您行使投票特权,并从自己认为正确的角度而不是从正确的角度留下自己回答问题的答案,而不是争论一个留在这个问题的答案。例如,也许您觉得l0b0的答案更好,但我的答案至少可以大致解决OP想要的事情。
从前台向后台发送应用程序需要终端和外壳程序之间的合作。终端不能单独执行此操作,因为外壳程序必须设置前台进程组。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'where foo是屏幕会话的名称,12也是窗口ID。
如果键入的速度不够快,kill -s SIGSTOP 1023 && kill -s SIGCONT 1023则从另一个外壳运行,假设1023作为目标PID。
免责声明:正如Ruslan可能知道的那样,该顺序实际上重新启动了作业,因此很快bash就没有注意到它。