端末 Ctrl+s および Ctrl+z

端末 Ctrl+s および Ctrl+z

tar cvf /backup/backup.tarたとえば、画面に多くのテキストを出力する長期実行コマンドがあります*。常にすべての出力を見たくありません。テキスト出力を停止し、他の操作を実行してから戻って「復元」して、バックアッププロセスがどれだけ進行しているかを確認したいと思います。私はそれが次のように行動すると期待しています。

/files/big_file_1
/files/big_file_2
/files/big_file_3
# Ctrl+s
# Do other stuff
# Ctrl+q , notice big jump in progress
/home/user/.bash_history
/home/user/small_file_1
/home/user/small_file_2
/home/user/small_file_3
...

Ctrl + sは画面出力を停止し(Ctrl + qは画面出力を再開します)、Ctrl + zはプロセスを一時停止してPS1プロンプトに戻ります。私の質問は、Ctrl + sがコマンドを実行し続けるのですか?

上記のtarコマンドで最後のファイルTARredを強調表示し、Ctrl + qを押して数分間そのままにすると、次のファイルが同じディレクトリまたは少なくとも比較的近いディレクトリにあるように見えます。

*私はWindowsでPuttyを使用していますが、Linux / Unixの標準端末とは異なる動作をしている場合はお詫び申し上げます。

答え1

私の質問は、Ctrl + sがコマンドを実行し続けるのですか?

はい、システムバッファがいっぱいになり、プロセスがブロックされるまで端末に書き込むことはできません。したがって、無制限に実行されるわけではありません。また、出力がブロックされているため、同じ端末で別のジョブを実行することはできません。

プログラムに戻ることができる状態でプログラムを終了するには、次を選択します。

  • サイドで異なる端末を実行する(他のPutty、異なるSSH接続)
  • 同じ端末内で複数の「ウィンドウ」を実行またはscreen再使用します。tmux
  • 出力をファイルにリダイレクトし、バックグラウンドでコマンドを実行し、必要に応じてファイルを表示しますtar cvf ... > /tmp/tar.out &tail /tmp/tar.out

関連情報