显然,我在tcsh shell中做了一些奇怪/错误的事情,现在每当我在后台启动一个应用程序并打印输出到标准输出时,该应用程序就会被挂起(停止)。奇怪的是,此行为仅在此终端中发生;如果我在另一个终端上执行相同的操作,则该应用程序将继续在后台运行,并将其输出打印到终端。
在“中断”终端中,我必须将挂起的应用程序放回前台(使用fg),以使其继续运行。
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)也不能解决此问题。
su - oliver
因此:我在该终端中做了什么才能得到这种行为, 我该怎么做才能恢复正常行为 ?这并不是一个重要的问题(我可以关闭终端并打开一个新终端),但我很好奇:-)
发生在Linux RHEL 6.4 64位,KDE 4.11.5,Konsole 2.11.3和tcsh 6.17.00上。
这将解决它:
stty -tostop
从手册页:
停止(-停止) 发送(不发送)SIGTTOU用于后台输出。如果后台作业尝试进行终端输出,则会导致它们停止。
停止(-停止)
发送(不发送)SIGTTOU用于后台输出。如果后台作业尝试进行终端输出,则会导致它们停止。
这tostop通常是默认设置,因为通常不希望混合多个作业的输出。因此,大多数人只希望前台作业能够打印到终端。
tostop