「はい、そして… 」は即興コメディの素晴らしい経験則です。 UNIXの世界ではそうではありません。
この愚かなコマンドを実行するとyes&
中断できません。端末がクラッシュするか、ループに閉じ込められます。
yes
stdoutに書き込もうとすると、バックグラウンドのすべてのプロセスが一時停止する必要があるため、プロセスがすぐに一時停止されるようにしたいのですが、そうでないようで、その理由を知りたいです。
答え1
端末へのバックグラウンドプロセスの書き込みは、出力モードが設定されている場合にのみ一時停止されますが、デフォルトではそうではTOSTOP
ありません。努力する
stty tostop
yes &
yes
一時停止したものが表示されます。
バックステージコース読むデフォルトでは、端末での操作は正しい入力を得るための合理的な方法がないため一時停止されます。
バラより端末アクセスのGNU Cライブラリマニュアルセクション。
を閉じた後も、TOSTOP
端末はクラッシュまたは中断されず、入力に応答します。したがって、端末yes
を終了するか(kill %
唯一のバックグラウンドジョブの場合)、フォアグラウンドにインポートしてfg
(CtrlC)停止してこれを実行できます。背景。盲目的にコマンドを入力する必要がありますが、うまくいきます。
答え2
Stephenの答えはとても良いですが、プロセスを前面に持ってきてから中断することでbashセッションの制御を得ることができることを付け加えたいと思います。
$ yes &
y
y
y
y
...
表示されない場合でも、次のように入力してください。
fg
EnterそれからCtrl-C
fg
Ctrl-Cバックグラウンドジョブをフォアグラウンドに戻して現在のジョブに信号を送信するジョブ制御コマンド。SIGINT
複数のバックグラウンドジョブがある場合は、フォアグラウンドに移動するジョブを指定するパラメータをfg
後に付けることができます。詳細はマニュアルページjobspec
にあります。bash