| [ CnUnix ] in KIDS 글 쓴 이(By): wooyou (치즈or빠다) 날 짜 (Date): 2002년 5월 17일 금요일 오후 10시 06분 25초 제 목(Title): [q]pthread안에서 fork에서 deadlock발생 pthread프로그램을 하나 작성했는데, 그중 한 thread에서 fork를 해야할일이 있습니다. 그러나 가끔씩 fork하다가 프로그램이 꼼짝하지 않아서 gdb로 살펴보니 deadlock이 발생하는 것 같습니다. 프로그램안에서 직접 mutex를 사용하지는 않는데, 시스템(?)에서 pthread_atfork 가 결과적으로 mutex를 걸면서 이때 deadlock이 발생하는 것 같습니다. 아래의 결과를 보면 7번째 frame에서 fork를 호출하면서 0~5까지 시스템이 자동으로 fork를 수행하기 위해서 올라가는 stack인것 같은데, 여기서 deadlock이 걸리니 꼼짝을 못하겠습니다. 혹시 이에 대해서 좋은 의견 있으시면 부탁드립니다. (gdb) bt #0 0xc020f8a0 in __ksleep () from /usr/lib/libc.2 #1 0xc003da4c in pthread_mutex_lock () from /usr/lib/libpthread.1 #2 0xc02235a4 in __thread_mutex_lock () from /usr/lib/libc.2 #3 0xc0220ea8 in sendpath64 () from /usr/lib/libc.2 #4 0xc003e0f8 in pthread_atfork () from /usr/lib/libpthread.1 #5 0xc003e450 in __pthread_fork () from /usr/lib/libpthread.1 #6 0xc021c644 in fork () from /usr/lib/libc.2 #7 0x11bf0 in CProcess::Execute (this=0x7f7f0704, strObj=0x7f7f083c "/home/iux/BIN/TxxMain", strArgv=0x7f7f0a3c "TxxMain Tx01 ") at CProcess.cpp:55 #8 0x7d38 in CPms::execute (this=0x7f7f0648, com=@0x7f7f0774) at CPms.cpp:344 #9 0x7620 in CPms::start (this=0x7f7f0648) at CPms.cpp:203 #10 0xb9c4 in main (argc=2, argv=0x7f7f051c) at PmsMain.cpp:118 ------------------------------------------------------------------------ 쳇바퀴돌듯 똑같은 날의 길어진 그림자 고갤들지 않고 풀리지 않는 실타래처럼 뒤엉킨 생활은 돌이킬수 없네 행복의 문은 자신의 마음 자신의 노력에 달려있는것 열심히 살고 보람도 얻고 진정한 행복을 모두 찾았으면... 우유한잔.... |