Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

signal handling 부분 질문 #10

Open
simple4logic opened this issue Jun 17, 2024 · 1 comment
Open

signal handling 부분 질문 #10

simple4logic opened this issue Jun 17, 2024 · 1 comment
Labels
solved Question solved

Comments

@simple4logic
Copy link

simple4logic commented Jun 17, 2024

안녕하세요, 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
Copy link
Collaborator

(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하는 것이 적절할 듯 싶습니다.

@kwonsw055 kwonsw055 added the solved Question solved label Jun 17, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
solved Question solved
Development

No branches or pull requests

2 participants