이런 상황을 상상해 봅시다:
while true
파일에는 반복 사이에 절전 모드가 없이 루프 내에서 지속적으로 텍스트가 추가됩니다 .
while true
do
echo "foo" >> source.file
done
파일을 다른 위치에 복사하려면 다른 프로세스를 시작하십시오 cp
. rsync
파일이 특정 크기(복사 프로세스가 시작될 때 소스 파일의 크기라고 추측)로 복사된 다음 복사 프로세스가 종료되는 것을 확인했습니다.
복사 프로세스가 실행되는 동안 파일 크기가 계속 증가하므로 언제 복사를 중지해야 하는지 어떻게 알 수 있습니까?
답변1
이 문제는 크기가 27바이트( )에 불과한 파일을 복사할 때 발생합니다 strace cp a b
.
read(3, "Who\222s there?\nIt's just me!\n", 131072) = 27
write(4, "Who\222s there?\nIt's just me!\n", 27) = 27
read(3, "", 131072) = 0
크기가 알려져 있지만 cp
(복사 중에 변경되지 않음) cp
최대 128K의 데이터를 읽으려고 시도합니다. a에 read()
0바이트가 전달되면 복사가 중지됩니다. 이는 파일의 끝에 도달했다는 신호입니다.
복제 프로세스가 데이터를 쓰는 것보다 데이터를 읽는 속도가 더 느린 경우(예: 다른 I/O 우선 순위 또는 cgroups 컨트롤러와 같은 기타 I/O 제약 조건으로 인해) 복제가 "영원히" 중지됩니다.