bg 命令不将进程发送到后台

bg 命令不将进程发送到后台

使用 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 等命令在挂起的终端中将不起作用。

相关内容