Linuxで開いているプロセスファイルを監視する(リアルタイム)


10

XYZプロセスによって開かれたファイルは、コマンドで見つけることができます

ls -l /proc/PID/fd

とにかく、tailx秒ごとに自動更新するなど、よりインタラクティブな方法で実行できる方法はありますか?

回答:


15

次のwatchコマンドを試してください。

watch -n 10 ls -l /proc/$$/fd

時計はいいです。

古い学校のwhileループを使用できます。

while :
do
 ls -l /proc/$$/fd
 sleep 10
done

watchdebianベースのシステムではprocpsパッケージに、RedHat派生システムではprocps rpmに含まれています。


1
スリープ自体は、whileループの条件として使用できるため、次のようにエレガントに記述できます。ls -l / proc / $$ / fd;を実行します。完了
ipozgaj

7

開いている各ファイルを表示したい場合は、でフィルタリングできますstrace。例えば:

strace -p _pid_of_app_ -e trace=open,close

2
これが本当に最良の答えです。フラグ-y-f、シェルで実行されている何かをデバッグしようとしている場合は、お勧めします。シェルPIDを渡すだけで、-fどのフォークにも従います。
Aea

4

lsofと組み合わせることができwatchます。

たとえばwatch "lsof -p 1234"、2秒ごとにpid 1234の開いているすべてのファイルのリストが表示されます。必要に応じて一部のパラメータを変更できます。


2秒ごとにリストが表示されることはありません。そのためには、パラメーター-r 2がありません!-pはPIDです。答えは非常に悪いです!
mahatmanich 2017

2
ニース、の-rオプションを認識していませんでしたlsof。そのため、以前watchlsof2秒ごとに実行していました。
クリスチャン

0

コマンドの出力をファイルに書き込むbashファイルを作成しました。ファイルは、現在の日付に基づいて生成されました。ここでは、開いているファイルの数を数えています。

#!/bin/bash
while :
do
 cd /proc/<PID>/fd
 today=$(date +"%m-%d-%Y")
 filename="/tmp/${today}.txt"
 ls -l | wc -l >> "${filename}"
 sleep 10
done
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.