【问题标题】:why do I get "Suspended (tty output)" in one terminal but not in others?为什么我在一个终端中出现“暂停(tty 输出)”,而在其他终端中却没有?
【发布时间】:2014-07-26 04:55:28
【问题描述】:

显然我在 tcsh shell 中做了一些奇怪/错误的事情,现在每当我在后台启动一个打印到标准输出的应用程序时,应用程序就会暂停(停止)。奇怪的是,这种行为只发生在这个终端;如果我在另一个终端上做同样的事情,应用程序只会在后台继续运行并将其打印输出到终端。

在“损坏的”终端中,我必须将暂停的应用程序放回前台(使用fg)才能继续运行。

例子:

thehost:/tmp/test1(277)> ls -l &
[3] 1454
thehost:/tmp/test1(278)> 
[3]  + Suspended (tty output)        ls --color=auto -l
thehost:/tmp/test1(278)> fg
ls --color=auto -l
total 0
thehost:/tmp/test1(279)> 

在另一个终端执行相同的命令可以正常工作:

thehost:/tmp/test1(8)> ls -l &                                                 
[1] 2280                                                                        
thehost:/tmp/test1(9)> total 0                                                 

[1]    Done                          ls --color=auto -l                         
thehost:/tmp/test1(9)>                                                         

在受影响的终端中启动 bash 也不能解决此问题:

thehost:/tmp/test1(280)> bash
oliver@thehost:/tmp/test1$ ls -l &
[1] 2263
oliver@thehost:/tmp/test1$ 

[1]+  Stopped                 ls --color=auto -l
oliver@thehost:/tmp/test1$ fg
ls --color=auto -l
total 0
oliver@thehost:/tmp/test1$ 

获取新的登录 shell(使用 su - oliver)也不能解决此问题。

那么:我在这个终端做了什么来得到这种行为,我能做些什么来恢复正常行为?这不是一个真正重要的问题(我可以关闭终端并打开一个新终端),但我很好奇:-)

发生在 Linux RHEL 6.4 64 位、KDE ​​4.11.5 和 Konsole 2.11.3 以及 tcsh 6.17.00 上。

【问题讨论】:

标签: linux shell terminal rhel


【解决方案1】:

这将解决它:

stty -tostop

来自手册页:

tostop (-tostop)

发送(不发送)SIGTTOU 用于后台输出。这会导致后台作业在尝试终端输出时停止。

tostop 通常是默认设置,因为通常不希望混合多个作业的输出。所以大多数人只是希望前台作业能够打印到终端。

【讨论】:

  • 不幸的是没有为我修复它:c 尝试在后台运行多个 gradle 构建,但它们都被暂停
  • 构建脚本中的某些内容会更改stty 设置吗? stty --all 显示什么?
  • 这个:pastebin.com/nGzySBS2 我确信构建脚本中的 stty 设置没有任何改变。我使用 zsh 顺便说一句。这是启动每个构建的命令:(gradle build --no-daemon --console=rich &>"/tmp/build-$(basename $d)") &
  • 也许 zsh 管理后台进程的方式与 bash 不同。
猜你喜欢
  • 2014-04-22
  • 2021-09-04
  • 2015-06-12
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 2015-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多