"Rationale : 시스템 인터페이스 일반 정보"의 " 신호 생성 및 전달 "에 대한 POSIX 항목은 다음 과 같이 말합니다.
프로세스를 위해 생성 된 신호는 하나의 스레드에만 전달됩니다. 따라서 둘 이상의 스레드가 신호를 수신 할 수있는 경우 스레드를 선택해야합니다. 스레드의 선택은 가장 넓은 범위의 적합한 구현을 허용하고 구현이 서로 다른 스레드간에 쉽게 전달되는 차이가있는 경우 "가장 쉬운"스레드로 신호를 자유롭게 전달할 수 있도록 구현에 전적으로 달려 있습니다.
로부터 signal(7)
Linux 시스템 매뉴얼에서 :
프로세스는 전체적으로 (예를 들어를 사용하여 전송 될 때 kill(2)
) 또는 특정 스레드 (예를 들어, 특정 기계를 실행 한 결과 생성 된 SIGSEGV 및 SIGFPE와 같은 특정 신호 )에 대해 프로세스에 대해 신호가 생성 (따라서 보류 중) 될 수 있습니다. 언어 명령은 스레드를 통해 지시되며, 신호를 사용하여 특정 스레드를 대상으로하는 신호pthread_kill(3)
)를 기준으로합니다. 프로세스 지향 신호는 현재 신호가 차단되지 않은 스레드 중 하나로 전달 될 수 있습니다. 둘 이상의 스레드가 신호를 차단하지 않은 경우 커널은 신호를 전달할 임의의 스레드를 선택합니다.
그리고 pthreads(7)
:
스레드에는 별개의 대체 신호 스택 설정이 있습니다. 그러나 새 스레드의 대체 신호 스택 설정은 스레드를 생성 한 스레드에서 복사되므로 스레드는 처음에 대체 신호 스택 (커널 2.6.16에서 수정 됨)을 공유합니다.
pthreads(3)
OpenBSD 시스템 의 매뉴얼에서 (대체 접근법의 예로서) :
신호 처리기는 일반적으로 현재 실행중인 스레드의 스택에서 실행됩니다.
(현재 다중 프로세서 컴퓨터에서 여러 스레드가 동시에 실행될 때 이것이 어떻게 처리되는지 알지 못합니다)
POSIX 스레드의 이전 LinuxThread 구현에서는 신호로 별개의 단일 스레드 만 타겟팅 할 수있었습니다. 에서 pthreads(7)
리눅스 시스템에서 :
LinuxThreads는 프로세스 지정 신호 개념을 지원하지 않습니다. 신호는 특정 스레드로만 전송 될 수 있습니다.