임베디드에 cron을 돌리려고 하는데...

harisoo의 이미지

크로스컴파일후 크론을 실행하니 크론이 바로 죽어버리더군요.
이상해서 로그 파일을 찾아서 보니

CRON (01/01-00:06:46-54) DEATH (can't fork)

라고 나오던데 왜 그런지 모르겟네요.

보드에는 uClinux를 사용하는데 uClinux에서는 vfork()가 사용가능한걸로 아는데..

고수님들의 조언 기다립니다.

whlee21의 이미지

CPU에 MMU가 없다면 fork대신 vfork를 써야합니다.

vfork를 이용하여 daemon을 만들려면 다음을 참고하세요...

http://www.ucdot.org/article.pl?sid=03/12/12/0317219&mode=thread

harisoo의 이미지

제가 크론을 데몬으로 만들고자 vfork를 사용하는게 아니라
크론 메인문에 보니 vfork()를 해서 실행을 하더군요...

그리고 mmu가 없으니 당연히 uclinux를 사용하는것이고요 ..

whlee21의 이미지

vixie-cron/cron.c를 보니 다음과 같이 fork를 사용하였네요...
혹시 님이 fork를 vfork로 바꾸셨나요?

        switch (fork()) {
        case -1:
            log_it("CRON",getpid(),"DEATH","can't fork");
            exit(0);
            break;
        case 0:
            /* child process */
            log_it("CRON",getpid(),"STARTUP","fork ok");
            (void) setsid();
            break;
        default:
            /* parent process should just die */
            _exit(0);
        }