/ tmp / test 에서 실행중인 a.out 프로그램이 있습니다 . 내가 나열 하면 / tmp / test에 대한 심볼릭 링크 입니다./proc/$(pgrep a.out)/cwd
지금, 나는 바인딩 을 / mnt / othertest 위에 / tmp를 / 테스트 와 mount -o bind /mnt/othertest /tmp/test
. 따라서이 새 마운트는 스택되고 이전 / tmp / test 는 숨겨집니다.
그래도 a.out 은 mount 명령 전에 시작 되었으므로 이전 경로에 액세스 할 수 있습니다.
내가 다루고 싶은 문제는 cwd 가 / tmp / test로 설정된 프로세스가 / mnt / othertest 의 디렉토리를 참조 하는지 여부를 아는 방법 입니다.
열린 파일의 경우 proc pseudo-filesyste 에서 fdinfo 를 사용 하고 마운트 ID를 읽을 수 있지만 cwd에 대한 정보를 찾지 못했습니다 . 프로세스의 시작 시간을 확인하고 마운트가 시작된 시간과 비교할 수 있지만 가능한 포크 때문에 잘못 될 수 있습니다.
전화 stat(2)
에 /proc/PID/cwd
다른 디렉토리에와별로 비교 device:inode
튜플.
예 ( -L
스위치를 지정하지 않으면 stat(1)
유틸리티가 a 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)
, 등의 목표를 수행하지만 참조하는 실제 객체에 직접 작용하지 않습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다