두 개의 스레드 th1, th2가있는 데몬이 있습니다. th2는 read(2)
을 사용하여 소켓을 읽습니다.두 개의 결과 SIGTERM을 처리하십시오.
SIGTERM
으로 데몬을 종료하면 th1이 데몬 소멸자가 호출 된 후 신호를 포착하고 처리하여 (종료 플래그 설정) pthread_kill(th2, SIGTERM)
을 호출합니다. 그러나 두 번째 스레드는 SIGTERM
을받지 않으므로 종료되지 않습니다. 소켓이 데이터를 수신하고 read()
에서 벗어나면 종료 플래그가 설정되어 실행이 완료됩니다.
pthread_kill(th2, SIGUSR2)
을 호출 한 다음 pthread_kill(th2, SIGTERM)
을 호출하면 모든 것이 올바르게 완료됩니다. 따라서 UNIX는 결과적으로 동일한 신호를 보내는 것을 허용하지 않는 것으로 보입니다.
이 문제는 운영 체제에 따라 결정됩니까? 지정된 스레드가 다른 스레드에서 SIGTERM
을 수신하도록 할 수 있습니까?
적절한 프로그래밍 언어 태그 (c, C++ 또는 yourLanguageHere)를 포함하면 더 많은 '눈'을 얻게됩니다. 행운을 빕니다. – shellter
감사합니다. 태그를 추가했습니다. 나는 유닉스가 C를 의미한다고 생각했다. – vissi
@vissi : 그건 틀렸다. 작업중인 언어의 태그 만 포함해야합니다. 귀하의 질문이 상호 운용성과 관련이 없다면 한 언어에만 태그를 붙여야합니다. – Puppy