SNU-ARC / 2024_spring_sysprog_Lab5

8 stars 0 forks source link

signal handling 부분 질문 #10

Open simple4logic opened 3 months ago

simple4logic commented 3 months ago

안녕하세요, TODO 가 달려있지 않은 부분이지만 handling 부분에서 의문이 들어 질문드립니다.

image

  1. ctrl+c 를 단 한번만 눌렀을 경우에는 sighandler2가 호출되지 않을텐데, listenfd를 close하고 mutex를 destroy하는 부분이 handler1이 아니라 2에만 있는 이유가 있을까요? 통계를 확인하지 않고 종료하면 listendf나 mutex가 적절히 close/destroy되지 않고 종료되는게 아닌가 궁금합니다.

  2. sigint를 받은 즉시, 종료 문구를 출력하고 keep_running =0를 해주는데, 0 할당 직후부터 kitchen thread 30개가 연이어 return을 해줍니다. 이 도중에는 두번째 sigint 신호를 받지 못하던데, printf 직후 와 0 할당 사이 적절한 딜레이가 추가되어야 하는게 아닐지 여쭤보고 싶습니다.

감사합니다.

kwonsw055 commented 3 months ago

(1) 말씀대로 listenfd와 mutex를 처리하고 종료되는 것이 맞습니다.

(2) 자세히 관측해보시면 오히려 kitchen thread가 아직 살아있을 때에는 두 번째 signal이 handling되고, kitchen thread가 모두 return 하고 나서는 signal handling을 못하는 것을 확인하실 수 있습니다.

이는 수업에서 배운 바와 같이, 같은 signal에 대한 handler는 nested 될 수 없기 때문이며, 같은 signal을 처리해줄 (현재 handler를 처리하고 있지 않는) thread가 남아 있는 경우에 한해서만 nested 되기 때문입니다.

아마 말씀해 주신 방법으로는 문제가 해결되지는 않을 것으로 생각되고, 같은 signal을 추가로 handling 해줄 dummy thread를 하나 더 생성하거나, handler에서 sleep하지 않고 handler 밖에서 sleep함으로써 두 번째 signal을 handling하는 것이 적절할 듯 싶습니다.