PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2010/05/29 17:02:02
Name 녹차한잔의여
File #1 스크린샷_8.png (0 Byte), Download : 4
Subject 리눅스 signal()과 자식/부모프로세스 종료에 대해...


//클라이언트
signal(SIGCHLD,sighandler);
pid_t pid = fork();
for(;;) {
                if(pid==0) {                             // 자식프로세스 - 전송
                        for(;;) {
                                char temp[256]="cli: ";
                                gets(buf);
                                if(!strcmp(buf,"bye")) {
                                        write(x,buf,strlen(buf));
                                        exit(0);
                                }
                                else {
                                        strcat(temp,buf);
                                        write(x,temp,strlen(temp));
                                }
                        }
                }
                else {                                 // 부모프로세스 - 수신
                        for(;;) {
                                y=read(x,buf,100);
                                buf[y]=0;
                                if(!strcmp(buf,"bye"))
                                        exit(1);
                                printf("%s\n",buf);
                        }
                }
        exit(0);
        }

//서버
        signal(SIGCHLD,sighandler);
        pid_t pid = fork();
        for(;;) {
                if(pid==0) {                          // 자식프로세스 - 전송
                        for(;;) {
                                char temp[256]="ser: ";
                                gets(buf);
                                if(!strcmp(buf,"bye")) {
                                        write(x,buf,strlen(buf));
                                        exit(0);
                                }
                                else {
                                        strcat(temp,buf);
                                        write(s2,temp,strlen(temp));
                                }
                        }
                }
                else {                                      //부모 프로세스 - 수신
                        for(;;) {
                                y=read(s2,buf,100);
                                buf[y]=0;
                                if(!strcmp(buf,"bye"))                 
                                        exit(1);
                                printf("%s\n",buf);
                        }
                }
                exit(0);
        }

채팅 프로그램을 만드는 데요 일단 위와 같이 되어있습니다.

음.. 예를 들어

클라이언트에서 전송할 문자가 bye라면 전송하고 죽게되고, 자식프로세스가 종료되므로

SIGCHLD에 따라부모프로세스도 따라 죽습니다.


그런데, 서버의 부모 프로세스는 클라이언트에서 bye를 받으면 죽게됩니다.

이 때 부모 프로세스가 죽으므로 자식프로세스도 따라 죽어야하는 거.. 아닌가요?


위에 첨부한 그림과 같이 클라이언트 / 서버가 모두 종료되나 ps -ef를 하여 보면

아직 서버의 프로세스가 하나 남아있는것을 보여집니다..


아... 근데 따로 kill할 필요는 없습니다... 서버쪽 터미널창에서 엔터한번 입력하고,

ps -ef를 다시하여 보면... 종료되더라구요...

왜 이렇게 되는건가요? 엔터 입력 없이 그냥 종료하려면 어찌해야할까요?;;

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
Cazellnu
10/05/29 19:53
수정 아이콘
다른개념 필요없이
만약 어떤 프로세스가 차일드를 하나 생성하고 그 프로세스는 종료되었다 칩시다.
그럼 차일드가 자동적으로 죽어야할 이유가없죠. 그에 관련해 따로 코딩을 넣어서 작동하게 하지 않는이상이요.
그럼 부모가 없어진 자식은 어떻게되느냐
현실과 비슷합니다. 다른이가 키우게 되겠죠. 그 다른이가 커널입니다.
그런데 ps 명령으로 보셨다면 파악을 하셨을텐데.. 부모프로세스 아이디가 1로 바뀝니다.
(데몬을 만들때 이러한방법을 많이 사용합니다.)

마지막으로 포크로 fd를 나누어 두 프로세스에서 컨트롤하는건 좀 좋지 않은 형태입니다.

고수준의 유닉스 네트워크 프로그래맹 관련으로는 고 리차드 스티븐스의 책을 보시는것을 추천합니다. 처음보면 어려울수있지만
현업에서도 많은도움이 될만큼 많고 괜찮은내용들이 있습니다.
녹차한잔의여
10/05/29 20:07
수정 아이콘
아... 우선 답변 감사드립니다.^^
네 맞네요 부모PID가 1로 바뀌네요....
데몬은... 좀비프로세스랑은... 다른거겠죠?
추천해주신 책 잘 살펴보겠습니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
82853 저그가 테란을 3:0으로 압사한적이 있나요? [19] 칼새2415 10/05/29 2415
82852 왜 롱기누스는 테란맵이었던거죠? [10] greensocks2573 10/05/29 2573
82851 오늘 결승전 3경기 리페어. [3] 바카스2203 10/05/29 2203
82850 이거 원래 이런가요? [1] 레몬커피1613 10/05/29 1613
82849 똥맛은 무슨맛이 날까요???(짱구님 필독!) [21] 독수리6863 10/05/29 6863
82848 박용욱 선수의 강점은 무엇이었나요? [31] 다음세기2903 10/05/29 2903
82846 오늘 MSL 결승 재방송 시간이 언젠가요? [1] Dream1544 10/05/29 1544
82845 자유게시판 17745 "내 마음대로 뽑아본~"이 글을 읽을수가 없네요 [4] 틀림과 다름1877 10/05/29 1877
82842 일본 아이돌 그룹 akb48 노래. [5] 현상2146 10/05/29 2146
82841 리눅스 signal()과 자식/부모프로세스 종료에 대해... [3] 녹차한잔의여2829 10/05/29 2829
82840 익스플로러 관련 멈춤 현상? [3] lightkwang1672 10/05/29 1672
82838 오늘 리쌍록을 약속때문에 못볼 것 같습니다 [14] 조각난미남2099 10/05/29 2099
82835 유령작가 보신분 계시나요? 진리는나의빛1936 10/05/29 1936
82833 정대세선수가 북한을 선택한 이유가 뭘까요? [7] 승천잡룡3145 10/05/29 3145
82832 비디오 게임기 질문입니다 [4] 유안1940 10/05/29 1940
82831 모니터 추천 부탁드려요. [2] 1663 10/05/29 1663
82829 포맷을 위한 웹하드를 추천부탁드립니다. [6] 현상2046 10/05/29 2046
82828 한달 뒤에 뉴욕 갈 예정인데 전기 코드 문제....해외 여행,어학연수 해보신분 조언 좀... [5] 창이2297 10/05/29 2297
82827 붉은 악마 머플러 가격 문의 드려요. [5] sweethoney2105 10/05/29 2105
82826 점프 공연 보신분 있으려나요? [5] DynamicToss1511 10/05/29 1511
82825 컴퓨터가 이상합니다. 도와주세요. [1] 옥희1481 10/05/29 1481
82824 화공 플랜트 설계에 관련한 질문 [3] 고카츄2701 10/05/29 2701
82821 대구 사시는 분들에게 여쭙니다~ 당일치기로 우방랜드에 갈려고합니다+맛집 질문 [7] 래토닝2883 10/05/29 2883
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로