Exemplo n.º 1
0
int singularity_fork_exec(unsigned int flags, char **argv) {
    int retval = 1;
    int i = 0;
    pid_t child;

    child = singularity_fork(0);

    if ( child == 0 ) {
        while(1) {
            if ( argv[i] == NULL ) {
                break;
            } else if ( i == 128 ) {
                singularity_message(ERROR, "singularity_fork_exec() ARGV out of bounds\n");
                ABORT(255);
            }
            singularity_message(DEBUG, "fork argv[%d] = %s\n", i, argv[i]);
            i++;
        }

        singularity_message(VERBOSE, "Running child program: %s\n", argv[0]);
        if ( execvp(argv[0], argv) < 0 ) { //Flawfinder: ignore
            singularity_message(ERROR, "Failed to exec program %s: %s\n", argv[0], strerror(errno));
            ABORT(255);
        }

    } else if ( child > 0 ) {
        retval = wait_child();
    }

    singularity_message(DEBUG, "Returning from singularity_fork_exec with: %d\n", retval);
    return(retval);
}
Exemplo n.º 2
0
void singularity_fork_run(unsigned int flags) {
    pid_t child;
    int retval;

    child = singularity_fork(flags);

    if ( child == 0 ) {
        return;
    } else if ( child > 0 ) {
        retval = wait_child();
        exit(retval);
    }
}
Exemplo n.º 3
0
void singularity_fork_run(void) {
    int tmpstatus;
    int retval = 0;
    pid_t child;

    if ( ( child = singularity_fork() ) > 0 ) {
        singularity_message(DEBUG, "Waiting on child process\n");
                                
        waitpid(child, &tmpstatus, 0);
        retval = WEXITSTATUS(tmpstatus);
        exit(retval);
    }

    return;
}
Exemplo n.º 4
0
int singularity_fork_exec(char **argv) {
    int tmpstatus;
    int retval = 0;
    pid_t child;

    child = singularity_fork();

    if ( child == 0 ) {
        if ( execvp(argv[0], argv) < 0 ) { //Flawfinder: ignore
            singularity_message(ERROR, "Failed to execv(%s, ...): %s\n", argv[0], strerror(errno));
            ABORT(255);
        }

    } else if ( child > 0 ) {
        singularity_message(DEBUG, "Waiting on child process\n");
                                
        waitpid(child, &tmpstatus, 0);
        retval = WEXITSTATUS(tmpstatus);
    }

    return(retval);
}
Exemplo n.º 5
0
int singularity_fork_daemonize(unsigned int flags) {
    pid_t child;

    child = singularity_fork(flags);

    if ( child == 0 ) {
        return(0);
    } else if ( child > 0 ) {
        singularity_message(DEBUG, "Successfully spawned daemon, waiting for signal_go_ahead from child\n");

        int code = singularity_wait_for_go_ahead();
        if ( code == 0 ) {
            exit(0);
        } else {
            singularity_message(ERROR, "Daemon failed to start\n");
            ABORT(code);
        }
    }
    
    singularity_message(ERROR, "Reached unreachable code. How did you get here?\n");
    ABORT(255);

    return(0);
}