NFSディレクトリにアクセスしようとしているサーバーにSSH経由で接続します。ただし、接続の問題により、ls
このディレクトリで基本コマンドを完了するのに時間がかかることがあります(常にではありません)。 SSH接続を終了して再開するよりも、これらのコマンドを中断するより良い方法はありますか?送ってもSIGING
効果がないようです。
答え1
カーネルバージョン2.6.25以降はアクセスできないNFSマウントで停止したプロセスを停止する唯一の方法はSIGKILLですkill -9
。
このカーネルバージョンより前は、使用されるマウントオプションに依存していました。このオプションを使用すると、hard,nointr
プロセスは中断されず、hard,intr
NFS中断プロセスがSIGINTを使用して中断される可能性があります。
カーネル2.6.25では、完全にシャットダウンできないプロセスは通常非常に望ましくないことが認識され、マウントオプションのペアintr/nointr
全体が動作不能に設定され、intr
標準動作モードになりました。同時に、この状態のプロセスは慎重に検討した後にのみ終了する必要があることを示すために、シグナル要件がSIGKILLに強化されました。
基本的には読み取り専用プロセス(たとえば、ls
常にシャットダウンしても安全でなければなりません)ですが、プロセスがNFSファイルシステム上のファイルに書き込むと、アクセスできないNFSサーバーで停止して終了します。一貫性のない状態にある可能性があり、一部のアプリケーション固有の回復操作が必要な場合があります。
options を使用すると、soft,timeo=<number of deciseconds>
指定された時間が経過するとエラーが発生して自動的にジョブが失敗しますが、これによりデータ整合性の問題が発生する可能性があります。たとえば、プログラムが書き込み可能な機能を持つNFSベースのファイルにアクセスし、書き込み操作が mmap(2)
失敗した場合、プログラムにエラーを報告する方法がなく、プログラムが続行されない限りプログラムが続行するのを防ぐことができます。方法もありません。 /プログラムがmunmap(2)
またはを呼び出すまでmsync(2)
。したがって、メモリ内のデータとディスク上のデータが同期していないか、メモリマップされたデータをプログラムの後ろから自動的に事前に作成された状態に復元する必要があります。どちらもありませんそれは良い選択です。それsoft
これがNFSマウントオプションが一般的に推奨されない理由です。