때때로 AIX의 bash에서 오류가 발생합니다: 시스템 호출이 중단되었습니다.

때때로 AIX의 bash에서 오류가 발생합니다: 시스템 호출이 중단되었습니다.

AIX의 bash에서 프로세스 대체에 문제가 있습니다. 이 문제는 매우 드물게 발생하며 서버가 로드될 때만 발생합니다.

오류 메시지의 예는 다음과 같습니다.

line 9: /tmp//sh-np-7841523: Interrupted system call

내 스크립트를 더 자세히 살펴보기 전에 프로세스 대체 문제가 이미 발생했는지 알고 싶습니다. 또는 프로세스 교체를 구현할 때 따라야 할 몇 가지 권장 사항에 대한 의견을 얻으십시오.

참고: 이 간단한 스크립트는 위의 오류를 생성할 수 있습니다.

#!/bin/bash
read var < <(echo)

하지만 저는 이것을 강조합니다. 이런 종류의 오류는 매우 드뭅니다. 체계적으로 재현할 수 없습니다. 스크립트가 테스트되는 서버는 프로덕션 서버입니다.

답변1

최신 버전의 bash를 사용하고 있는지 확인하세요. 그렇다면 버그를 신고해 주세요. 기존 바이너리를 설치한 경우 bash 바이너리를 어디서 얻었는지 정확하게 명시하세요. bash를 직접 컴파일했다면 정확히 어떤 컴파일러와 컴파일 시간 구성을 사용했는지, 어디서 얻었는지 명시하세요. 소스 코드를 얻으려면. 또한 AIX 및 하드웨어 아키텍처의 정확한 버전을 언급하십시오. 물론, 여기서 했던 것처럼 오류를 재현하는 방법도 언급해주세요.


"시스템 호출 중단됨"은 실제로 오류가 아닙니다. EINTR호출자에게 시스템 호출이 전혀 실행되지 않았음을(시도했지만 실패했음을) 알려주는 오류 상태( )입니다 . 애플리케이션 처리에 대한 일반적인 접근 방식은 EINTR신호 처리기 실행과 같은 다른 처리를 수행한 후 시스템 호출을 다시 실행하는 것입니다. EINTR존재 목적은 차단 시스템 호출을 할 때 애플리케이션이 긴급 작업을 수행할 수 있는 기회를 제공하는 것입니다. 당신은 읽을 수있다EINTR을 확인하고 함수 호출을 언제 반복해야 합니까?그리고보다 안전한 신호 처리를 위해 재진입 기능 사용더 많은 배경 자료를 읽어보세요.

EINTRBash는 예상치 못한 곳에서 시스템 호출에 의해 반환된 결과를 봅니다. 일반적인 방식으로 오류를 보고합니다. 이는 운영체제의 문제나 버그로 인해 발생할 수 있는 버그입니다.

관련 정보