答案1
当谈到终端作业控制时,您对前台和后台的含义有错误的理解。它们并不取决于您是否可以看到输出。
终端设备(更具体地说,线路规则)有一个前台进程组ID与之相关。这决定了当线路规程处于规范模式并接收映射到信号的特殊字符之一(也是线路规程中保存的信息)时,线路规程将信号发送到哪个进程组。
作业控制shell将进程组分配给组成shell作业的进程,并在这些进程组和其自身的进程组之间切换终端设备的前台进程组,以执行作业控制。
默认情况下,这不会影响这些进程到终端的输出。有只有一个这会影响输出的情况,即当您tostop
在行规则中打开标志时(使用stty
或某些此类命令)。该标志亮起是不是默认值。 (据我所知,只有两个例外:可以在某些操作系统上设置默认初始设置,但仅限于真实的终端,例如串口设备在 FreeBSD 上;和我的vc-reset-tty
工具在重置为“正常”状态时设置此标志。)
因此,如果您正在运行生成输出的 shell 作业,则该输出将要与 shell 的输出混合在一起。
打开的替代方案tostop
在这里对您没有帮助。您有一个生成输出的 shell 作业不断地。显然是在输出交互式进度显示。终端作业控制不能很好地结合持续互动的节目。 (相比之下,文本编辑器(例如)vi
和文本文件查看器(例如)more
不断地交互式。)您的选择是tostop
关闭,进度显示与其他进程的进度显示混合,或者tostop
打开,进度显示导致程序在每次进度更新时停止。
或者,在紧握的手上,使用两个端子。