프로세스가 파일 쓰기를 완료한 시점을 어떻게 알 수 있나요?

프로세스가 파일 쓰기를 완료한 시점을 어떻게 알 수 있나요?

쉘에서 생성된 프로세스가 있습니다. 백그라운드 프로세스로 실행되며 데이터베이스를 .csv 파일로 내보냅니다 /tmp.

백그라운드 프로세스가 완료(종료/종료)되었는지 또는 CSV 파일 잠금이 닫혔는지 어떻게 알 수 있나요? 파일이 작성된 후 다른 호스트로 FTP를 보낼 계획이지만 파일 전송을 시작하기 전에 전체 파일이 필요합니다.

답변1

Linux에서는 프로그램이 파일에 쓰는 동안에도 파일이 잠기지 않습니다(Windows와 달리).

프로세스가 완료되었는지 확인하려면 다음을 사용하십시오.

while [[ 1 ]]; do
  pgrep dbprocess &>/dev/null

  if [[ $? -eq 0 ]]; then
    echo still running
  else
    echo finished
    # start ftp transfer
  fi
  sleep 2
done

프로세스에 파일이 열려 있는지 확인하려면 다음을 사용할 수 있습니다.

  • lsof <file>열려 있는 프로세스가 나열됩니다.<file>

  • ls -l /proc/$(pgrep db-process)/fd프로세스에 의해 열린 파일 설명자 나열db-process

답변2

wait내장된 쉘을 사용하여 이 작업을 수행 할 수 있습니다 .

내장된 wait함수는 단순히 셸을 일시 중지하고 백그라운드 작업이 완료될 때까지 기다립니다. 이를 특정 작업에 전달하여 기다리거나 모든 작업을 기다리게 할 수 있습니다.

예를 들어:

echo $(date): starting
sleep 5 &
echo $(date): do something else
wait
echo $(date): background job finished

결과 :

Thu Sep 25 12:06:48 EDT 2014: starting
Thu Sep 25 12:06:48 EDT 2014: do something else
Thu Sep 25 12:06:53 EDT 2014: background job finished

관련 정보