프로세스가 디렉터리의 파일을 사용하고 있는지 테스트하는 방법

프로세스가 디렉터리의 파일을 사용하고 있는지 테스트하는 방법

디렉터리의 파일이 다른 프로그램에서 사용되지 않는 경우에만 디렉터리를 압축하기 위해 IF 문에서 lsof를 사용해 보았습니다. 쉘 프롬프트에서 이 정보를 얻을 수 있습니다

lsof +d /mydir/

출력이 반환되지 않으면 디렉터리가 사용되지 않는 것입니다. 이것을 조건문으로 포맷하려면 어떻게 해야 합니까?

if (lsof returns anything) then
  echo "$folder in use"
else
  tar $folder

감사해요

답변1

다음과 같이 답변의 문자 수를 계산합니다.

#!/bin/bash

a="$(lsof +d "${folder}")"

if [[ "${#a}" -gt 0 ]] then
    echo "${folder} in use"
else
    tar "${folder}"
fi

답변2

출력의 행 수를 계산해 볼 수 있습니다. 열 이름 헤더 행을 얻은 다음 각 활성 프로세스에 대한 추가 결과 행을 얻습니다. 예를 들면 다음과 같습니다.

COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
bash    1002 debian  cwd    DIR  254,4     4096 393217 .
lsof    1592 debian  cwd    DIR  254,4     4096 393217 .
lsof    1593 debian  cwd    DIR  254,4     4096 393217 .

명령 을 사용하여 wc -l줄 수를 계산하면 후행 줄 바꿈도 계산됩니다. 이는 wc -l활성 프로세스가 없을 때 2줄의 출력을 평가해야 함을 의미합니다. 따라서 다음과 같이 작동해야 합니다.

if [[ $(lsof +d "${folder}" | wc -l) -gt 2 ]]; then
  echo "${folder} in use"
else
  tar "${folder}"
fi

lsof +D또한 디렉토리에 대한 재귀적 전체 하강 검색을 수행하기 위해 call(소문자 "d" 대신 대문자 "D")을 사용하려는 것처럼 보입니다 .

관련 정보