どうやら私は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で発生します。
これはそれを修正します:
stty -tostop
Manページから:
tostop(-tostop)
バックグラウンド出力用にSIGTTOUを送信します(送信しません)。これにより、バックグラウンドジョブが端末出力を試みた場合に停止します。
通常、このtostop
がデフォルト設定です。通常、複数のジョブの出力を混合することは望ましくありません。そのため、ほとんどの人は、フォアグラウンドジョブでターミナルに印刷できるようにしたいだけです。