プログラムがあります。行く。出力逃げる/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/cwd
device: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)
は、ターゲットに従わずに参照する実際のオブジェクトに直接作用します。