Annotation of coherent/g/usr/lib/misc/bedaemon.c, revision 1.1

1.1     ! root        1: /* 
        !             2:  * Disassociate from controling terminal and process
        !             3:  * group. Close all open files.
        !             4:  */
        !             5: #include       <stdio.h>
        !             6: #include       <signal.h>
        !             7: #include       <kernel/param.h>
        !             8: 
        !             9: bedaemon()
        !            10: {
        !            11:        int     child_pid;
        !            12:        int     fd;
        !            13:        
        !            14:        /* Daemon does its own sigsetup. Do it to be standard module for all 
        !            15:         * daemon processes do this extra signal here.
        !            16:         */
        !            17:        signal(SIGHUP, SIG_IGN);        /* immune from the group leader death */
        !            18: 
        !            19:        /* When we did not start from background fork and let parent die. */
        !            20:        if ((child_pid = fork()) < 0) {
        !            21:                fprintf(stderr, "cron: cannot fork\n");
        !            22:                exit(1);
        !            23:        } else
        !            24:                if (child_pid > 0)      /* parent */
        !            25:                        exit(0);
        !            26:        
        !            27:        /* Disassociate from controlling terminal & process group */
        !            28:        setpgrp();
        !            29:        
        !            30:        /* This fork should garantee that process can't reacquire a new 
        !            31:         * controlling terminal.
        !            32:         */
        !            33:        if ((child_pid = fork()) < 0) {
        !            34:                fprintf(stderr, "cron: cannot fork\n");
        !            35:                exit(1);
        !            36:        } else
        !            37:                if (child_pid > 0)      /* parent */
        !            38:                        exit(0);
        !            39:        
        !            40:        /* Close all open files, chdir "/", and umask(0). */
        !            41:        for (fd = 0; fd < NOFILE; fd++)
        !            42:                close(fd);
        !            43:        
        !            44:        chdir("/");
        !            45:        umask(0);       /* We do not want any surprise with file creation */
        !            46: }
        !            47: 
        !            48: #ifdef TEST
        !            49: main()
        !            50: {
        !            51:        bedaemon();
        !            52:        sleep(100);
        !            53: }
        !            54: #endif
        !            55: 
        !            56: 
        !            57: 
        !            58: 
        !            59: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.