web-dev-qa-db-ja.com

なぜ1つの端末では「サスペンド(tty出力)」が表示され、他の端末では表示されないのですか?

どうやら私はtcshシェルで奇妙な/間違った何かをしました、そして今私がバックグラウンドでアプリケーションを起動するときはいつも、標準出力に印刷するアプリケーションは一時停止(停止)されています。奇妙なことに、この動作はこの端末でのみ発生します。同じことを別の端末で行った場合、アプリケーションはバックグラウンドで実行され続け、出力を端末に出力します。

「壊れた」ターミナルで、中断されたアプリケーションを(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$ 

新しいログインシェルを取得する(su - oliver)もこれを解決しません。

それで、この動作を取得するためにこの端末で何をしましたか?通常の動作に戻すにはどうすればよいですか?それは本当に重要な問題ではありません(ターミナルを閉じて新しいものを開くことができます)が、興味があります:-)

Linux RHEL 6.4 64ビット、KDE ​​4.11.5およびKonsole 2.11.3、tcsh 6.17.00で発生します。

13
oliver

これはそれを修正します:

stty -tostop

Manページから:

tostop(-tostop)

バックグラウンド出力用にSIGTTOUを送信します(送信しません)。これにより、バックグラウンドジョブが端末出力を試みた場合に停止します。

通常、このtostopがデフォルト設定です。通常、複数のジョブの出力を混合することは望ましくありません。そのため、ほとんどの人は、フォアグラウンドジョブでターミナルに印刷できるようにしたいだけです。

10
Barmar