또 다른 이상한 작업 스케줄러 버그
잡 스케줄러에서 발생하는 SIGCHLD 신호 처리 버그를 분석한 내용입니다.
리눅스 신호 처리 방식에서 동일한 신호가 여러 번 발생해도 하나로 합쳐지는(코얼레스) 특성 때문에, 여러 자식 프로세스가 거의 동시에 종료되면 잡 스케줄러가 모든 종료 신호를 놓치고 일부 작업의 종료를 인지하지 못하는 문제가 발생합니다.
이로 인해 종료된 작업이 여전히 실행 중으로 인식되어 다음 작업 실행이 지연되거나 중복 실행이 막히는 현상이 나타납니다.
해결책으로는 wait4 시스템콜을 WNOHANG 옵션과 함께 루프 내에서 반복 호출하여, 신호가 합쳐져도 종료된 모든 자식 프로세스를 확실히 처리하도록 개선하는 방법을 제안합니다.
이 방식은 작업 종료 시점을 정확히 기록하고, 작업 지연 문제를 해소하는 데 실용적입니다.