web-dev-qa-db-ja.com

暴走した猫を殺す方法は?

多くの場合、数千行までの内容のファイルに対して誤ってcatコマンドを実行します。

catコマンドをkillしてみます CtrlC または Ctrl+Z、しかしどちらもcatの合計出力がターミナルに表示されて初めて有効になるので、catが完全に実行されるまで待つ必要があります。

待機を回避するより良い解決策はありますか?ファイルのサイズが最大で100MBになることもあり、それを待つとイライラするからです。

tcshを使用しています。

129
JigarGandhi

問題のファイルに本当に大量のデータが含まれている場合、信号を送信すると、終了する前に実際にcatに到達する可能性があります。実際に観察しているのは、端末の有限の速度です。catはデータを端末に送信し、端末がすべてを表示するまでに少し時間がかかります。

通常、出力ウィンドウごとに出力ウィンドウ全体を何らかの方法で再描画する必要があることに注意してください(つまり、ウィンドウの内容を1行上に移動し、次の行を下部に印刷します)。これを簡単な方法で行った場合よりも速くする手法とアルゴリズムはありますが、それでもまだ時間がかかります。

したがって、出力をできるだけ早く削除したい場合は、通常、実際の再描画は行われないため、ターミナルウィンドウを非表示にするです。グラフィカル環境では、これはウィンドウを最小化するか、別の仮想デスクトップに切り替えるか、Linux仮想コンソールで別の仮想デスクトップに切り替えるだけです((Ctrl +)Alt + Fx)。

また、低速のネットワークリンク(GSM接続を介したSSHなど)でこれを実行した場合、catが信号によって強制終了される前に、端末の速度が低下するため、出力が大幅に少なくなることにも注意してください。もうボトルネックになることはありません。

76
peterph

端末の設定

これは、バッファリングの問題よりも、ターミナルの設定方法に関係していると思います。 stty -a | grep intrの出力を確認します。出力行にintr = ^C;があるはずです。 Ctrl-C tty/ptyで有効になっています。そうでない場合は、stty intr ^Cを使用して有効にできます。この行を.tcshrcまたは.loginに追加して永続化します(または最初に変更する行を削除します!)。

失敗 Ctrl-CSIGQUITを送信してみることもできます Ctrl-\。これが機能しない場合は、もう一度stty -a | grep quitをチェックして、正しく設定されているかどうかを確認してください。

端末エミュレータのセットアップ

端末エミュレータの設定(使用している場合)も確認してください。このレベルでショートカットが設定されている可能性があります(コピーなどの場合)。 Ctrl-C ptyレベルに達していません。ショートカットは、デスクトップ環境またはウィンドウシステムの他の場所にも設定できます。

ターミナルエミュレータを使用している場合のLinuxでの良いテストは、Linuxコンソールに切り替えることです(Ctrl-Alt-F1)、そこにログインして、同じ動作が発生するかどうかを確認します。表示されない場合は、ウィンドウシステムまたはターミナルエミュレータに問題があることを示しています。

peterph で示唆されているように、ptyデバイスからデータが読み取られるまでの遅延に問題がある可能性があります。しかし、これが事実であり、実際にデータが表示されるまで数分待たなければならない場合は、端末エミュレータが確実にバッファリングしているwayデータが多すぎる(またはPCが非常に遅い)。答えは、ターミナルエミュレータの設定でそのバッファサイズを減らす方法を見つけるか、別のバッファを使用することです。

追加のヒント

追加する価値がある何か;誤ってバイナリファイルをcatした場合、私は通常、暴走cat状況に陥ります。これのもう1つの影響は、端末設定を台無しにすることです(バイナリデータがさまざまな端末エスケープコードと一致する場合)。 tputがインストールされている場合(通常はデフォルトです)、次のコマンドで再起動する必要を回避できます。

tput reset
4
Graeme

これがtmuxオプションc0-change-intervalおよびc0-change-trigger用に設計されています。とにかく、再開可能なセッションにはスクリーンマネージャを使用する必要があります。

3
J-16 SDiZ

の Ctrl-O オプションは、110ボー日以来Unixにありました。長いASCIIファイルが遅い出力デバイスでダンプされ、ファイル全体がデバイスドライバーの出力バッファーに配置された場合、catの暴走コマンドは常に問題でした。 Ctrl-O バッファのフラッシュとフォローアップを開始します Ctrl-O フラッシュをオフに切り替えて、猫が通常の速度で読めるようにします。 Ctrl-O と入力すると、ファイル全体がフラッシュされ、すぐにコマンドプロンプトが返されます。

Linuxデバイスドライバーのコーダーがこの機能を引き続き追加する必要性を感じたかどうかは不明です。この機能は、デバイスドライバレベルで追加されました。 Ctrl-S そして Ctrl-Q 実装のみ可能でした。これを使用して、大量の小切手印刷を伴う大規模なデバッグ実行をダンプし、表示する必要がある場所まで下にスクロールしました。

1
user62612