답변:
fuser
이것을 위해 사용할 수도 있습니다 :
~> less .vimrc
# put in background
~> fuser .vimrc
.vimrc: 28135
~> ps 28135
PID TTY STAT TIME COMMAND
28135 pts/36 T 0:00 less .vimrc
if [
퓨저 "$ file"`]; 그런 다음 종료`
ls
다음과 같은 패턴입니다 . 오류 (예 : 유효하지 않은 옵션이 지정됨) 또는 파일을 찾을 수 없으면 (종료 정보를보고하면 0 ) 종료 코드 2를 리턴합니다 .
대부분의 Linux 시스템에서 lsof NAME
다음 작업을 수행합니다.
fin@r2d2:~$ lsof /home/fin
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
bash 21310 fin cwd DIR 8,1 4096 5054467 /home/fin
lsof 21320 fin cwd DIR 8,1 4096 5054467 /home/fin
lsof 21321 fin cwd DIR 8,1 4096 5054467 /home/fin
fin@r2d2:~$
cwd
라인 (프로세스의 현재 작업 디렉토리로 사용하는 보고서)은 디렉토리 만보고합니다 .
각 프로세스가 먼저 파일이 열려 있는지 확인하고 파일이 열려 있거나 진행되지 않은 경우 파일을 만들거나 열지 않아야하는 경우 두 프로세스가 동시에 잘 확인할 수 있기 때문에 파일을 여는 것은 잠금이 아닙니다. 열려 있지 않다면, 생성하거나여십시오.
파일을 잠금으로 사용하려면 점검 및 잠금 조작은 단일 인터럽트 불가능 조작이어야합니다. 읽기 전용 모드로 파일을 작성하고 잠금을 해제하기 위해 파일을 제거하여 Unix 파일 시스템에서이를 달성 할 수 있습니다. 파일이 존재하고 (읽기 전용 인 경우) 파일 작성에 실패하므로 단일 원자 조작으로 점검 및 잠금을 얻을 수 있습니다.
잠금 프로세스가 데몬으로 실행되는 쉘 스크립트 umask
인 경우 새 파일이 작성되는 권한을 설정하는 프로세스 별 설정을 사용하여이 효과를 얻을 수 있습니다 .
oldumask = $ (umask) umask 222 # 소유자도 쓸 수없는 파일 만들기 echo $$> / var / lock / foo 인 경우 그때 : 잠금 성공 그밖에 : 잠금 실패 fi umask $ oldumask또한 소유 프로세스의 PID를 파일에 기록하여 다른 문제를 해결합니다.
cat /var/lock/foo
/proc
루트로 요청할 수 있습니다 .
ls -l /proc/*/cwd | grep '/var/lock/foo$'
또는 필사자로서 :
ls -l /proc/*/cwd 2>/dev/null | grep '/var/lock/foo$'
당신이없이 파일에 정확히 어떤 프로세스의 파일 기술자 링크를 알고 싶은 경우 lsof
또는 fuser
-를 통해 검색 /proc
:
$ find /proc -regex '\/proc\/[0-9]+\/fd\/.*' -type l -lname "*$1*" -printf "%p -> %l\n" 2> /dev/null
대체 $1
당신이 찾고있는 열려있는 파일 이름으로. -printf
보고 싶은 모든 것을 수정 하거나 해당 프로세스 정보 egrep -o '[0-9]+' | head -1
와 함께 사용할 수 있습니다 .ps -Fp <pid>
@fin 의 대답은 분명히 가장 좋은 대답이지만 @JoseLSegura의 의견 에 대답하는 것이 가능하지 않은 경우 위의 해결책은 내 대답이었습니다.$ lsof <filename>