프로세스가 파일 쓰기를 마치면 어떻게 알 수 있습니까?


9

쉘에서 생성 된 프로세스가 있습니다. 백그라운드 프로세스로 실행 중이며에서의 CSV 파일로 DB를 내 보냅니다 /tmp.

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


프로세스가 어떻게 든 당신을 알려줍니다 ...
궤도에서 가벼운 레이스

답변:


7

Linux에서는 프로그램이 파일을 쓰더라도 (윈도우와 달리) 파일이 잠기지 않습니다.

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

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


7

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.