Linuxで特定のプロセスを開いたファイルを識別するためのスクリプトが必要です
fdを識別するには:
>cd /proc/<PID>/fd; ls |wc –l
プロセスで使用しているファイル記述子の番号のリストである番号のリストが表示されることを期待しています。そのプロセスで使用しているすべてのファイルを表示する方法を教えてください。ありがとう。
おそらく使用したいコマンドはlsof
. /proc
コマンドはシステム情報を取得するためのより明確で安定した方法であるため、これは を掘り下げるよりも優れたアイデアです。
lsof -p pid
ただし、何かに興味がある場合は、ファイルが関連付けられているファイルへのシンボリックリンクである/proc
ことに気付くかもしれません。/proc/<pid>/fd/x
コマンドでシンボリックリンクの値を読み取ることができますreadlink
。たとえば、これは端末 stdin がバインドされていることを示しています。
$ readlink /proc/self/fd/0
/dev/pts/43
または、あるプロセスのすべてのファイルを取得するには、
ls /proc/<pid>/fd/* | xargs -L 1 readlink
lsof は素晴らしいですが、次のことができます。
ls -l /proc/pidoftheproces/fd
lsof -p <pid number here> | wc -l
lsof がない場合は、次を使用してほぼ同じことができます。/proc
例えば
$ pid=1825
$ ls -1 /proc/$pid/fd/*
$ awk '!/\[/&&$6{_[$6]++}END{for(i in _)print i}' /proc/$pid/maps
lsofが必要です。foo.txtを開いたアプリケーションのPIDを取得するには:
lsof | grep foo.txt | awk -F\ '{print $2}'
またはMacmedeが反対のことをすると言ったこと(プロセスによって開かれたファイルを一覧表示する)。
lsof | grep processName