![bg 命令不将进程发送到后台](https://linux22.com/image/219041/bg%20%E5%91%BD%E4%BB%A4%E4%B8%8D%E5%B0%86%E8%BF%9B%E7%A8%8B%E5%8F%91%E9%80%81%E5%88%B0%E5%90%8E%E5%8F%B0.png)
使用 ctrl-z 暂停进程后,我尝试使用bg
命令将其发送到后台。不幸的是,该进程没有发送到后台,而是重新显示为在前台运行。然后,我再次执行 ctrl-z 以便再次暂停。不幸的是,组合键不再响应,并且该过程仍在进行中。更糟糕的是,该命令是for
对许多项目的循环。如果我按 ctrl-c,作业将在下一次迭代中恢复,直到最后一次迭代。
在 macOS 上的 iTerm 内的 tmux 上运行。
答案1
根据您的描述,该bg
命令确实有效,否则 ctrl-z 和 ctrl-c 仍然有效。
仅仅因为进程位于后台并不意味着它仍然无法向您发送输出。如果您不想看到这种情况,请运行stty tostop
,然后如果后台作业尝试发送输出,它们将被停止,然后您可以fg
根据需要在前台 ( ) 中继续它们。
如果您有一个像这样在后台运行的嘈杂进程,您可能可以按几次回车键,然后看到您仍然收到 shell 提示符。您可以通过以下几种方式来补救这种情况:
- 你可以尝试通过盲目输入kill命令来杀死它。
stty tostop
您可以按照上面的建议盲目输入。- 您可以键入
fg
将其带回前台(希望您没有多个并得到错误的),然后使用 ctrl-z 停止它或使用 ctrl-c 杀死它 - 如果您处于图形环境或终端多路复用器(如 tmux)中,您可以打开另一个窗口并尝试使用
ps
或找到有问题的进程top
并从那里终止它。
答案2
文本窗口命令“jobs”将报告 cntl-Z 停止了哪些作业。 “fg #”和“kill #”,其中#是命令报告的作业编号,会将#选定的作业带到fg或杀死正在运行的进度。 jobs 命令适用于 sh、csh、bash。使用“fg”并退出程序比杀死它更好。
这不起作用:“更多”文本文件、.c 等。在“更多”中键入单个 v 命令来编辑文本文件。如果“vim”编辑会话是 cntl-Z,终端将挂起,并且“more”命令和“vim”将必须从另一个窗口终止。其他 cntl-Z、fg、kill、ls、ps 等命令在挂起的终端中将不起作用。