nohup 모드에서 느린 저장소에 쓰면 프로세스가 차단되나요?

nohup 모드에서 느린 저장소에 쓰면 프로세스가 차단되나요?

nohup에 쓰는 프로세스가 있고 이 프로세스가 쓰는 스토리지가 느린 경우 nohup에서 실행되는 프로세스가 차단됩니까? 예를 들어:

프로세스 A는 nohup에서 실행 중이며 콘솔에 10줄을 써야 합니다.

nohup.out에 이 10줄을 쓰려면 디스크 저장소에 2분이 걸립니다. (6줄을 쓴 다음 1분 동안 디스크를 기다리다가 멈춥니다.)

나머지 행이 기록될 때까지 프로세스 A가 차단됩니까?

답변1

nohup모드는 프로세스가 I/O 바인딩되어 있는지 여부와 관련이 없습니다. 그렇습니다. 느린 저장으로 인해 프로세스가 느려질 수 있습니다.

프로세스의 출력이 급증했지만(예: 1시간당 10개 행) 처리량이 "느린" 저장소보다 낮은 경우 파이프나 FIFO에 쓴 다음 다른 사람이 느린 저장소에 복사하도록 하여 이를 개선할 수 있습니다. ) 성능. 프로세스), 출력 버스트가 파이프의 버퍼를 초과하지 않는 한.

mkfifo /tmp/fifo
nohup prog >/tmp/fifo &
cat </tmp/fifo >slow_log_file &

또는

nohup prog | buffer -s 16k >slow_log_file &

어디완충기apt-get install buffer작성자를 차단하는 것을 피하기 위해 큰 내부 대기열을 유지하는 특수 프로그램(Debian에서 사용 가능)입니다 .

또는 소스 코드를 제어하는 ​​경우 버퍼링을 직접 구현하고 별도의 로거 프로세스를 사용하여 느린 저장소에 쓸 수도 있습니다. 나는 djbdns(안정성으로 알려져 있음)가 로거 프로세스를 사용한다는 것을 알고 있습니다.

답변2

많은 양의 IO를 생성하는 일반적인 프로세스이므로 차단됩니다. 그러나 일반적으로 파일 시스템 블록은 메모리에 캐시됩니다. 운영 체제가 더티 블록을 디스크에 쓰려고 하면 상단 출력의 대기 열이 100%로 변경되는 것을 볼 수 있습니다.

관련 정보