프로세스의 현재 작업 디렉터리에 해당하는 마운트 지점을 찾는 방법은 무엇입니까?

프로세스의 현재 작업 디렉터리에 해당하는 마운트 지점을 찾는 방법은 무엇입니까?

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

관련 정보