「yes&」がBashセッションを中断するのはなぜですか?

「yes&」がBashセッションを中断するのはなぜですか?

「はい、そして… 」は即興コメディの素晴らしい経験則です。 UNIXの世界ではそうではありません。

この愚かなコマンドを実行するとyes&中断できません。端末がクラッシュするか、ループに閉じ込められます。

yesstdoutに書き込もうとすると、バックグラウンドのすべてのプロセスが一時停止する必要があるため、プロセスがすぐに一時停止されるようにしたいのですが、そうでないようで、その理由を知りたいです。

答え1

端末へのバックグラウンドプロセスの書き込みは、出力モードが設定されている場合にのみ一時停止されますが、デフォルトではそうではTOSTOPありません。努力する

stty tostop
yes &

yes一時停止したものが表示されます。

バックステージコース読むデフォルトでは、端末での操作は正しい入力を得るための合理的な方法がないため一時停止されます。

バラより端末アクセスのGNU Cライブラリマニュアルセクション

を閉じた後も、TOSTOP端末はクラッシュまたは中断されず、入力に応答します。したがって、端末yesを終了するか(kill %唯一のバックグラウンドジョブの場合)、フォアグラウンドにインポートしてfgCtrlC)停止してこれを実行できます。背景。盲目的にコマンドを入力する必要がありますが、うまくいきます。

答え2

Stephenの答えはとても良いですが、プロセスを前面に持ってきてから中断することでbashセッションの制御を得ることができることを付け加えたいと思います。

$ yes &
y
y
y
y
...

表示されない場合でも、次のように入力してください。

fgEnterそれからCtrl-C

fgCtrl-Cバックグラウンドジョブをフォアグラウンドに戻して現在のジョブに信号を送信するジョブ制御コマンド。SIGINT複数のバックグラウンドジョブがある場合は、フォアグラウンドに移動するジョブを指定するパラメータをfg後に付けることができます。詳細はマニュアルページjobspecにあります。bash

関連情報