부모프로세스와 자식프로세스에서의 stdout 출력문제에 대해서 여쭤보고 싶습니다.
글쓴이: cain / 작성시간: 수, 2010/11/03 - 6:01오전
안녕하세요~ Linux 시스템 콜에 대해서 공부하고 있는 학생입니다...
제가 이해를 못한 부분에 있어서 자료를 찾아봐도 없길래... 여기에 글을 남기게 되었습니다.
부모프로세스와 자식프로세스의 출력에 관한 부분인데요
fork()를 이용해서 자식프로세스 생성후에 해당 자식프로세스를 무한루프를 돌며 0부터 1씩 증가하면서 출력하도록 하였습니다.
그리고 부모프로세스에서 SIGINT를 받으면 signal(SIGINT, signal_handler)를 이용해서 핸들러가 호출되도록 하였습니다.
그런데... SIGINT를 받기 전까진 자식프로세스에서 열심히 출력을 해주다가 SIGINT를 부모프로세스에서 받고 signal_handler를 호출하였는데
signal_handler에서 SIGINT를 몇 번이나 받았는지 값을 증가시키면서 출력하도록 하였는데 핸들러가 한번 호출되고 나서 자식프로세스에서 출력이 되질 않습니다.
뭔가 놓친 부분이 있는 것 같은데 감이 오질 않고 자료를 찾아봐도 대부분 핸들러 자체에 대한 설명이나 시그널에 대한 설명이지 출력에 있어서 이런 문제를 다루는 자료를 찾지 못했네요...
제가 아직 생각하지 못한 부분이 어디인지 간단한 설명이라도 짚어주셨으면 합니다..
읽어주셔서 고맙습니다^^;;
Forums:
코드를
코드를 올려주세요.
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
http://blog.n01se.net/?tag=se
http://blog.n01se.net/?tag=setsid
아마 세션을 분리해줘야 시그널이 도달하지 못할듯 한데요.
아니면 자식 프로세스에서 SIGINT을 ignore 해야 할 것도 같네요.
자식 프로세스가 죽어 있는지 확인해보면 알수있겠네요.
------식은이 처------
길이 끝나는 저기엔 아무 것도 없어요. 희망이고 나발이고 아무 것도 없어.
답변 감사합니다^^;;
아무래도 원인이 SIGINT때문이었던 것 같습니다.
SIGINT를 부모프로세스에서도 받고 자식프로세스에서도 받는다는 것을 잊고있었습니다...
SIGINT를 BLOCK해주니까 되네요 ^^;; 간단한 것인데도 계속 터미널에서의 출력버퍼로밖에 생각이 안되니
정작 중요한 부분으로는 생각을 못했습니다..
cinsk님, nthroot님 답변 감사합니다 ^^;
by chaoxifer
by chaoxifer
댓글 달기