자식프로세스가 죽을때마다 리스타트하려는데요.
글쓴이: seeker / 작성시간: 목, 2003/03/27 - 9:25오전
SIGCHLD 시그널이 발생할때 마다
시그널핸들러함수에서
프로그램을 리스타트하려고 합니다만 올바른 시도인지요?
void f_en54079_sigHandler( int intSigNo ) { pid_t pid; int stat; /* * 자식프로세스가 종료할때마다 호출되어 , 사용된 자원을 시스템에 반환함. */ while ( ( pid = waitpid( -1 , &stat , WNOHANG ) ) > 0 ) { f_BatchLogWrite( __LINE__ , "child %d terminated\n" , pid ); fflush( 0 ); /* 죽은 프로세스를 restart시킴 */ if ( f_en54079_searchId( pid ) != 9 ) { /* 여기에... fork & exec Process */ } } return; }
Forums:
네, 돌아갑니다.
대충 -_- 그렇게 하시면 돌아갑니다.
f_en54079_searchId가 뭔지 모르겠지만서도요..
나머지는 일반적으로 쓰는 코드 같습니다.
근데 문제는 child가 프로그램의 이상이라든가 뭔가 이상조건으로
시작하자마자 죽는 경우가 발생하게 되면 그럼 이 녀석이 계속 fork를 합니다.
fork 하고 곧바로 죽고....
이 경우에는 어떻게 대응할지 정책을 정하셔야 하는데,
그냥 그걸 당연한 방식으로 받아들일지,
일정시간안에 몇번 이상 프로그램을 다시 띄우면 죽어버리든지,
아니면 다른 관제시스템과 연결되어 있다면 alert를 시킬 것인지를
염두에 두셔야 할 것 같고요, 만일 후자 쪽으로 방향을 잡는다면,
해당 코드에서 이 부분을 알아낼 수 있는 것을 추가하셔야 할 것입니다.
댓글 달기