쉘에서 생성된 프로세스가 있습니다. 백그라운드 프로세스로 실행되며 데이터베이스를 .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