プロセスの現在の作業ディレクトリに対応するマウントポイントを見つける方法は?

プロセスの現在の作業ディレクトリに対応するマウントポイントを見つける方法は?

プログラムがあります。行く。出力逃げる/tmp/テスト。のリストは/proc/$(pgrep a.out)/cwdシンボリックリンクです。/tmp/テスト

今私は縛ります/mnt/その他のテスト到着/tmp/テストそしてmount -o bind /mnt/othertest /tmp/test。したがって、この新しいインストールは以前のインストールと重複します。/tmp/テスト隠された。

それにもかかわらず、行く。出力mountコマンドの前に起動すると、古いパスにアクセスできます。

私が解決したい問題は、プロセスがあるかどうかを知る方法です。西ドイツ設定/tmp/テストのディレクトリを表します。/mnt/その他のテストまたは。

開いたファイルの場合、これは簡単です。FD情報~からプロセス擬似ファイルシステムを使用し、マウントIDを読みましたが、その情報が見つかりませんでした。西ドイツ。プロセスの開始時刻を確認し、インストールが開始された時刻と比較できますが、フォークが発生して間違っている可能性があります。

答え1

別のディレクトリを呼び出し、tuplesを介して比較しますstat(2)/proc/PID/cwddevice:inode

はい(-Lスイッチが提供されていない場合、ユーティリティstat(1)lstat(2)代わりにシステムコールを実行しますstat(2)):

$ mkdir -p /tmp/foo /tmp/bar /tmp/baz
$ cd /tmp/foo
$ echo $$
20890

# mount -B /tmp/bar /tmp/foo
# stat -Lc %d:%i /proc/20890/cwd
2055:1835959

# stat -Lc %d:%i "$(readlink /proc/20890/cwd)" /tmp/foo /tmp/bar
2055:1843068
2055:1843068
2055:1843068

# umount /tmp/foo
# stat -Lc %d:%i /tmp/foo
2055:1835959

以下のファイルのように、実際/proc/PID/fd/proc/PID/cwdシンボリックリンクではありません。open(2)などstat(2)は、ターゲットに従わずに参照する実際のオブジェクトに直接作用します。

関連情報