fork 후 child process 문제점 ?
글쓴이: idrukawa / 작성시간: 화, 2012/08/28 - 11:07오전
안녕하세요.
fork() 후 execv() 를 호출하는 프로그램이 있습니다.
운용체제는 solaris 10입니다.
몇 년동안 이상없다가 (문제 상황을 발견하지 못했을 수도 있지만...) 딱 한 번 발견된 증상인데요.
소스 상으로 fork() 후 child 에서 execv() 로 다른 process를 기동 하도록 되어 있는데
실제 동작에서 child가 동작을 멈춘상태로 계속 떠있습니다.
덕분에 2개의 동일한 프로세스가 기동되어 있는 모양이 되어 버렸네요 ㅠ
이렇게 판단한 근거는 fork() 후 parent에서의 로그는 출력되고, child 에서의 로그는 출력되지 않았기 때문입니다.
소스 중 문제되는 부분을 발췌합니다. 도움이 될만한 의견은 아무거라도 좋으니 남겨주세요.
//------------------------------------ // Fork Child Process (=Sub process) //------------------------------------ if ( (childProcID = fork()) == 0 ) { char pExcuteFileName[128] = ""; if ( getenv("NIMS_BIN_PATH") != (char *)NULL ) { sprintf( pExcuteFileName, "%s/%s", getenv("BIN_PATH"), FILE_NAME ); } else { PrintLog(LL_ERR); return FALSE; } PrintLog(LL_DBG); ... // Child Process를 기동시킨다. executeRlt = execv( (char *) pExcuteFileName, pArgv ); ... } //------------------------------------ // Fork Child Process Fail //------------------------------------ else if ( childProcID < 0 ) { PrintLog(LL_ERR); return FALSE; } //------------------------------------ // Parent(ProcMgr) Process //------------------------------------ else { PrintLog(LL_INF); ... }
Forums:
댓글 달기