Linux의 절전 시스템 호출 - 신호와의 상호 작용

Linux의 절전 시스템 호출 - 신호와의 상호 작용

Linux 운영 체제의 절전 문서에 대한 질문이 있습니다.

자고있는 남자 3설명하다:

스레드 안전성과 관련하여 sleep()"MT-Unsafe sig: SIGCHLD/linux"가 있는데, 이는 Linux에서 sleep()신호 처리기가 임시로 설치될 수 있음 을 의미합니다 SIGCHLD.

그러나 동일한 문서에는 "Linux sleep()에서는 nanosleep(2).

이 확인되었습니다수면 구현GNU 표준 라이브러리 내.

남성 2nm 수면설명하다:

"POSIX.1은 ( nanosleep) 신호와 상호 작용하지 않는다고 명시적으로 명시합니다." Nanosleep은 "호출 스레드에서 핸들러 호출을 트리거하는 신호를 전달"(nanosleep 매뉴얼 참조)하여 중단될 수 있습니다.

질문은 다음과 같습니다.

sleep(3)Linux에서 문서화 문제가 있습니까?

"MT-Unsafe sig:SIGCHLD/linux"에 대한 문서는 잘못된 것 같습니다. 문서에 따르면 Linux에서 이를 sleep(3)사용해 nanosleep(2)도 방해가 되지 않기 때문입니다.SIGCHLDnanosleep(2)

아니면 내가 뭔가를 놓치고 있는 걸까?

답변1

texinfo의 댓글원천좀 더 명확하게 말하면:

@deftypefun {unsigned int} sleep (unsigned int @var{seconds})
@standards{POSIX.1, unistd.h}
@safety{@prelim{}@mtunsafe{@mtascusig{:SIGCHLD/linux}}@asunsafe{}@acunsafe{}}
@c On Mach, it uses ports and calls time.  On generic posix, it calls
@c nanosleep.  On Linux, it temporarily blocks SIGCHLD, which is MT- and
@c AS-Unsafe, and in a way that makes it AC-Unsafe (C-unsafe, even!).

그것이 거짓말이 아니라면 sleep(3)Linux에는 차단 기능이 없습니다 SIGCHLD. 이는 단지 오래된 해결 방법의 잔재일 뿐입니다.2015년에 삭제됨) 이전 Linux 버그의 경우(2.6.32에서 수정됨)

이것은범죄언어는 다음에서 소개됩니다.

* manual/time.texi: Document MTASC-safety properties.
author  Alexandre Oliva <[email protected]> 
    Sat, 1 Feb 2014 04:51:51 +0000 (02:51 -0200)
committer   Alexandre Oliva <[email protected]> 
    Sat, 1 Feb 2014 04:51:51 +0000 (02:51 -0200)
commit  23e5b8cb1ba7a31450bda75e3f06b7c76e175db4

답변2

Linux 내부에 대한 경험이 더 많은 사람이 내 말을 수정할 수 있지만 주변 문서를 보면 임시로 설치될 를 sleep()통해 구현할 권한을 유지하려는 것처럼 보입니다 .alarm()SIGALRM

이는 실제 문서에는 언급되지 않았지만 SIGCHLD여전히 "MT-Unsafe sig"에 속합니다.

관련 정보