>> Delete No. 23830 article
No. [질문] manager thread에서 zombie가 생기는 데요.

등록 2001-03-14 14:57:00 By localhost     조회 2
이름 이희석    

		OS : wowLinux 6.2 update
  우선 제 프로그램은 TCP,UDP연결 할당을 스레드를 생성해서 각각 해주고
TCP,UDP던 연결 설정이 오면 그 처리를 또 스레드를 생성해서 하게 되는
흐름입니다.
 우선 문제는 프로그램을 처음 구동했을때 ps -e로 보면 프로세스가 기본적으로
5개가 생기는 군요. 그래서 패킷을 마구 받으며 프로그램이 돌다 보면
프로세스가 마구마구 만들어 지고 수 시간이 지나고 나면 초기에 기본적으로
생겼던 스레드중 2번째 스레다가 <defunct> 즉 zombie가 생겨 버려 더이상
동작을 안하구 멈쳐 버리는 겁니다.
  간단하게 스레드 두개 만들어서 도는 프로그램으로 gdb를 사용하여 디버깅을
했습니다.
결과는 처음 스레드를 생성할때 프로세스를 3개 만들더군요
 다음은 gdb 에서 라인씩 실행한 것입니다.
 Breakpoint 1, main () at t.c:19
19          res = pthread_create(&a_thread[0], NULL, thread_function, (void *)message);
(gdb) n
[New Thread 7189 (manager thread)]
[New Thread 7187 (initial thread)]
[New Thread 7190]
20              if (res != 0) {
(gdb) n
24              printf("Waiting for thread to finish...");
(gdb) n
Waiting for thread to finish...
25          res = pthread_create(&a_thread[1], NULL, thread_function2, (void *)message);
(gdb) n
[New Thread 7191]
26              if (res != 0) {
(gdb) n
 위와 같이 보시면 스레드 7189번이 manager thread라고 되어 있죠
 다음은 ps -e 의 결과 입니다.
  7187 pts/4    00:00:00 t
 7189 pts/4    00:00:00 t
 7190 pts/4    00:00:00 t
 7191 pts/4    00:00:00 t
 보시면 manager thread라는 7189번인놈이 실제 제 프로그램에서 오랫동안 돌다가
zombie가 되어 버린다는 것이죠..
 이걸 어찌 해결 해야 되는 지요?
kldp에서 zombie를 해결하는 소스가 있다고 해서 써 봤지만 별로 효과가
없었구요...이젠 어지 해야 할지 모르겠습니다..
[관리자] 패스워드를 입력 하십시오. 답장이 존재하면 함께 삭제됩니다.[ 목록 | 이전 ]
패스워드:    

Copyleft 1999-2026 by JSBoard Open Project
Theme Designed by IDOO All right reserved