프로그램이 있어요가. 출력도망가다/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)
은 대상을 따르지 않고 참조하는 실제 개체에 직접 작용합니다.