GNU/Linux >> Linux の 問題 >  >> Linux

Linux でファイルを開いているプロセスを特定するにはどうすればよいですか?

ほとんどの Linux システムでは lsof NAME 仕事をします:

[email protected]:~$ lsof /home/fin
COMMAND   PID USER   FD   TYPE DEVICE SIZE    NODE NAME
bash    21310  fin  cwd    DIR    8,1 4096 5054467 /home/fin
lsof    21320  fin  cwd    DIR    8,1 4096 5054467 /home/fin
lsof    21321  fin  cwd    DIR    8,1 4096 5054467 /home/fin
[email protected]:~$

fuser も使用できます このため:

~> less .vimrc
# put in background
~> fuser .vimrc
.vimrc:              28135
~> ps 28135
  PID TTY      STAT   TIME COMMAND
28135 pts/36   T      0:00 less .vimrc

ファイルを開くことはロックではありません。なぜなら、各プロセスがファイルが最初に開いているかどうかを確認し、開いている場合は続行しないか、開いていない場合は作成/開く必要がある場合、2 つのプロセスが同時にチェックする可能性があるためです。開いていないことを確認したら、作成または開きます。

ファイルをロックとして使用するには、チェック アンド ロック操作が 1 つの中断不可能な操作である必要があります。読み取り専用モードでファイルを作成し、それを削除してロックを解除することにより、Unix ファイルシステムでこれを実現できます。ファイルが存在する (かつ読み取り専用である) 場合、ファイルの作成は失敗するため、単一のアトミック操作でチェック アンド ロックを取得します。

ロック プロセスがデーモンとして実行されるシェル スクリプトである場合、umask を使用してこの効果を得ることができます。 、新しいファイルが作成されるパーミッションを設定するプロセスごとの設定:

oldumask=$(umask)
umask 222   # create files unwritable to owner too
if echo $$ > /var/lock/foo
then
    : locking succeeded
else
    : locking failed
fi
umask $oldumask
これにより、所有プロセスの PID もファイルに書き込まれ、他の問題が解決されます:cat /var/lock/foo 「どのプロセスがこのファイルを開いていますか?」という特定の質問に関して、これは、ファイルシステムをアンマウントしたいが、一部のプロセスがファイルを開いているためにアンマウントできない場合に役立ちます。これらのコマンドが利用できない場合は、/proc に問い合わせることができます ルートとして:

ls -l /proc/*/cwd | grep '/var/lock/foo$'

または、通常のユーザーとして:

ls -l /proc/*/cwd 2>/dev/null | grep '/var/lock/foo$'


Linux
  1. NFSとは何ですか?Linuxにインストールする方法

  2. LinuxでRARファイルを作成、抽出、または開く方法は?

  3. Linux のシリアル ポートでデータを監視するにはどうすればよいですか?

  1. Linux で実行中のプロセスのダンプ ファイルを作成するにはどうすればよいですか?

  2. プロセスが開いているファイルを確認するにはどうすればよいですか?

  3. Linux コンピューターに搭載されている CPU ソケットのタイプをどのように判断しますか?

  1. ファイルを作成しているプロセスを特定する方法は??

  2. Linux でディスクに書き込みを行っているプロセスを特定する方法

  3. Linux でどのプロセスがファイルをロックしているかを調べるにはどうすればよいですか?