だからこれは何年も私に付いてきました。
これは、ddよりも多くのプログラムで発生しますが、生のファイルシステム操作に関連するプログラムで頻繁に発生します。
ddを使用してコピーする場合(たとえば、起動可能なUSBディスクの作成など)、sudo dd if=somelinuxdistro.iso of=/dev/sdb bs=64K status=progress
アプリケーションはすべての信号を無視するのと同じです。 (またはカーネルの場合SIGKILL
)は、「中断なしでスリープ」を意味するhtop
ステータスを表示します。D
ずっとそういうことができる年齢ハードウェア障害が発生して定期的に使用している場合は、作業を続行するために端末から切り離す方法が見つからないようです。通常、タスクを実行するために別の端末に切り替えます。
以前にこれを調べたことがありますが、この状態の目的、またはなぜカーネルがこの状態でプロセスの終了を拒否するのか、時間の無駄を避けるために何をすべきかについての説明が見つかりませんでした。 (また提案なしするこのようなことが起こった場合。 )
簡単に言うと: D状態のプロセスを確実に強制終了するか、少なくとも端末から切り離す方法が必要です。また、そもそも彼らがこの状態にできるようにする背景で何が起こっているのか説明したいと思います。
答え1
ノンストップの読み取りを中断できず、これがシャットダウン中のNFSサーバーと関係がない場合は、ドライバーエラーがあります。
ローカルバックエンドストレージのI / Oタイムアウトは5〜10分を超えることはできません。したがって、入力するか、^C
10^Z
分以内に何も起こらない場合は、ドライバエラーがあります。
バックグラウンドは、fast IO
高速IOが予測可能な時間後に終了するため、UNIXがシグナルによる無停電を定義することです。
信号を介してIOを中断できるようにすると、クリーンな状態に戻る必要があるため、より高いオーバーヘッドが発生します。 IOが開始された後に発生するすべての操作は解放されなければならず、戻りはIOが開始された時点でのみ発生する可能性があります。
さらに悪いことは、バックエンドストレージドライバが中断可能なIOを実装している場合、そのドライバの上にあるファイルシステムが処理できない問題を引き起こすことです。ファイルシステムのバックアップストアとして使用するように設計されたドライバを使用しています。
カーネルメッセージを呼び出しdmesg
て確認することで問題を解決できます。 10分後に割り込みが機能しない場合(読み取りまたは書き込みシステム呼び出しがタイムアウトして2つのdd
システム呼び出し間で終了する可能性がある場合)、再起動する必要があります。
USBデバイスの場合は、再起動する前にデバイスを取り出すことができます。