fork가 안되는 경우도 있나요?
글쓴이: kukuman / 작성시간: 월, 2003/09/29 - 10:26오후
이상한 것이...
max_process만큼 prefork를 하려고 하는데,,,
max_prcesss값이 10인데,,, 딱 3번 fork하고 안하는 건 왜 그럴까요-_-;;
process_num과 max_prcess값은 물론 확인을 했습니다...
fork 에러도 아닙니다...
에러 처리는 따로 해주었기 때문에 잡혀야 하는데,,,
안 잡힙니다...
2번 포크했다가 4번 했다가 그러는 것도 아니고 50번은 띄웠는데,,,
딱 3번만 포크합니다... -_-+
이런 경우도 있는지요??
Forums:
fork()를 세번 call해서 4개의 process가 떠있는 상황인가요
fork()를 세번 call해서 4개의 process가 떠있는 상황인가요?
설명해주신 부분만 봐서는 무슨 문제인지 모르겠네요.
그 부분의 소스를 공개하시면 문제를 이해하는데 참고가 될 것 같습니다.
하나 물어보겠습니다.
fork()후에 부모노드인지 아닌지 체크 안하셨나요?
안할경우는 3번 fork()하면 3개가 아닌 8개의 프로세스가 생겨납니다.
이유를 말씀드리자면, fork()한 뒤에 부모인지 체크 안하고 바로 fork()하면
부모도 fork()하고 자식도 fork()하니까. 결국에는 프로세스수가 하나 늘어나는
게 아닌 두배로 늘어납니다.
Written By the Black Knight of Destruction
코드 올립니다~
우선 답변들 감사드립니다~
제가 봐도 질문이 애매하네요 :oops:
근데 워낙에 황당해서... ^^
다음은 prefork하는 부분 code입니다...
보시다시피... 별로 특이한 것이 없습니다...
syslog를 찍어서 살펴본 바로는,,,
포크를 x개(오늘은 4개 하네요-_-, < max_process)하고는
parent process가 죽어버립니다... (ps로 보면 parent process의
PID가 없고, child process들의 PPID가 모두 1로 잡혀있습니다...)
Be at a right place at a right time...
정확히 왜 3개만 fork 가 되는지는 잘 모르겠지만..[code
정확히 왜 3개만 fork 가 되는지는 잘 모르겠지만..
errai 님이 말씀하신것 처럼 ChildProcess.. 이놈이 처리하러 갔다가 복귀하면서 생기는 문제가 아닐까요?
다음줄에 exit(0) 하나 넣어서 혹여 복귀하더라도 그냥 종료하도록 하면 안될까요?
...
혹시 시그널처리들은 다 해주셨나요? wait도 그렇고...
prefork와 prethreading은 저도 몇번 시켜본 적이 있는데, 테이블을 따로 만들어두고 관리를 하시는 것이 더 편리할 것 같아 보입니다. 물론 지금은 실험이시겠지만...
stevens아저씨 책을 뒤져보시면 prefork와 prethreading에 대한 샘플들도 있으니 참조해보세요.
흠...
else문을 넣어서 parent로 못가게 했는데도 여전하네요 -_-
네,,, signal handler를 둬서 처리하게 했습니다,,,
그리고 만약 chlild prcess가 죽을 경우 발생하는 SIGCHLD를 syslog로 찍게 해주었는데,,, 찍히지 않았습니다...
혹시 signal쪽으로 무엇이 잘못되면 이럴 수도 있는 건가요?
테이블을 따로 만들어 관리한다 함은 어떤 것을 말씀하시는지 조금 자세히 말씀해 주실 수 있을런지요?
Be at a right place at a right time...
해결하신 방법이 궁금합니다.
지금 저도 fork() 하다가 죽어버려서요.
저는 대략 20번 정도 루프를 돌면서 fork -> execv() 를 합니다.
그런데 fork() 하다가 쓰레드가 죽는 경우가 생겨서요.
제 생각에는 비슷한 상황인것 같아서요.
참고로 저도 syslog() 를 사용해서 로깅하고 있는데,
로깅하는 부분에서 멈추는 경우도 발생했습니다.
** pstack 으로 살펴본 내용 **
sigsuspend 상태에서 깨어나지 않는 경우도 발생했습니다.
죄송하지만, 부디 해결하신 방법을 알려주시 겠어요?
peace :)
댓글 달기