どのプロセスがマウント解除を妨げているかを調べるにはどうすればよいですか?


26

私がする時

sudo umount /media/KINGSTON

わかった

umount: /media/KINGSTON: device is busy.

すべてのウィンドウを閉じ、すべてのシェルが他のディレクトリを指していることを確認します。どのプロセスがアンマウントを妨げているかを見つけるにはどうすればよいですか?


3
ここにタイプミスがあると思いますが、コマンドが「どのプロセスが帯域幅を使い果たしているかを調べるにはどうすればよいですか?」
8128

回答:


24

ターミナルを開きます:

fuser -c /media/KINGSTON

次のようなものが出力されます。

/media/KINGSTON/: 3106c 11086

これにより、このボリュームを使用しているプロセスのPIDがわかります。pidの末尾の余分な文字は、追加情報を提供します。(3106cのc)

c-プロセスは現在の作業ディレクトリとしてファイルを使用しています
m-ファイルはmmapでマップされています
o-プロセスは開いているファイルとして使用しています
r-ファイルはプロセスのルートディレクトリ
t-プロセスはアクセスしていますテキストファイルとしてのファイル
y-このファイルはプロセスの制御端末です

アンマウントするには、そのPIDを強制終了して、アンマウントを再試行します

sudo kill -9 3106 11086
sudo umount /media/KINGSTON

注:これらのpidの正確なアプリケーション名を見つけるには、このコマンドを使用できます

cat /proc/<pid>/cmdline

例えば ​​: cat /proc/11086/cmdline

これは以下のようなものを出力します。

    evince^@/media/KINGSTON/Ubuntu-guide.pdf^@

これが役立つことを願って


2
fuser -ckもそれを殺します。
ジョアンピント

3
これらのアプリケーションに完全にシャットダウンする機会を与えるために、最初に-9オプションなしでそれらを強制終了することをお勧めします。またps <pid>、/ procのファイルを編集する代わりに、コマンド名と引数を確認することをお勧めします。
マリウスゲドミナス

あなたの手順に従ってプロセスを見つけます。それはThunar--deamonです。追加の情報を提供する追加の文字はありません。私はまだそれを殺していない、私はそれが他の実行中の物に与える影響について心配している。
ギヨームコテ

7

最も便利なツールはlsof lsofをインストールするです。どのファイルがどのプロセスで使用されているかを示します。/media/KINGSTONがマウントポイントの場合(デバイス名も機能します)、次のコマンドは、このマウントポイントで使用されているすべてのファイルを表示します。

lsof /media/KINGSTON

このコマンドを通常のユーザーとして実行すると、独自のプロセスのみが表示されます¹。実行sudo lsof /media/KINGSTONして、すべてのユーザーのプロセスを確認します。

出力はlsof次のようになります。

COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
zsh4    31421 gilles  cwd    DIR    8,1     4096 130498 /var/tmp
zsh4    31421 gilles  txt    REG    8,1   550804 821292 /bin/zsh4
zsh4    31421 gilles  mem    REG    8,1    55176 821326 /usr/lib/zsh/4.3.10/zsh/complist.so
zsh4    31421 gilles   12r   REG    8,1   175224 822276 /usr/share/zsh/functions/Completion.zwc

COMMANDカラムショープログラムの実行ファイルの名前とPID列示すプロセスID。NAME列には、ファイル名を示しています。(deleted)開いているときにファイルが削除されたかどうかを確認できます(ファイルが削除されると、名前はなくなりますが、ファイルを使用する最後のプロセスがファイルを閉じるまで存在し続けます)。USER自明であるべきです。他の列はFD、おそらくを除いて重要ではありません。おそらく、プロセスによるファイルの使用方法を示しています。

  • cwd:現在の作業ディレクトリ
  • txt:プログラム実行可能²
  • mem:メモリマップファイル(ここでは、開いているファイルと考えてください)
  • 番号:実際に開いているファイル。後続の文字は、r読み取りやw書き込みなどの開始モードを示します

ファイルが開いているウィンドウを機械的に見つける方法はありません(これは実際には技術的に意味がありません:プロセスに複数のウィンドウがある場合、ファイルは特にウィンドウに関連付けられていません)。プロセスのウィンドウ(そしてもちろん、プロセスはウィンドウを持つ必要はありません)。ただし、通常、コマンド名とファイル名は、攻撃者を見つけてファイルを適切に閉じるのに十分です。

ファイルを閉じることができず、すべてを終了したいkill 31421場合31421は、(プロセスIDは)またはkill -HUP 31421(「ハングアップ」)でプロセスを強制終了できます。単純な殺害でうまくいかない場合は、極端な偏見を持って殺してください:kill -KILL 31421

lsof、glsofにはGUIがありますが、まだプライムタイムにはまだ準備が整っておらず、Ubuntu用にパッケージ化されていません。

¹ LSOFは、他のユーザのプロセスに関するいくつかの情報を一覧表示することができますが、それはマウントポイントを検出しませんので、あなたがマウントポイントを指定した場合、それらを表示されません。
² 実行可能コードは、実行可能形式の議論ではしばしばテキストと呼ばれます。



2

一方、フューザーコマンドは大幅に改善されました。1つのコマンドですべてのジョブを実行できます。

$ sudo fuser -ickv /"mountpoint"

どこで:

  • パラメータkは問題のプロセスを強制終了します。
  • 一方、v予め番組プロセスとそのユーザ
  • i確認を求めます。

一部のプロセスが抵抗する場合は、最も頑固なプロセスを殺すfuser -ickv -9(またはより一般的に-SIGNAL)で再試行します。
しかし、あなたは常にいくつかの「不滅の」プロセスを見つけるでしょう...!

この場合、私は最近使用することを学びました

$ sudo umount --lazy --force <mountpoint>

最後のリソースとして、これまで毎回それが機能していました。


私は不滅のプロセス、私の失敗した試みを見つけましたvboxmanage。-_-
sudo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.