pid_t launch()

in init/init.c [272:299]


pid_t launch(char **argv, char **envp) {
    int pid = fork();
    if (pid != 0) {
        die_on(pid < 0, "fork");

        return pid;
    }

    if (argv == NULL)
    argv = (char **) default_argv;

    if (envp == NULL)
    envp = (char **) default_envp;

    // Unblock signals before execing.
    sigset_t set;
    sigfillset(&set);
    sigprocmask(SIG_UNBLOCK, &set, 0);

    // Create a session and process group.
    setsid();
    setpgid(0, 0);

    // Terminate the arguments and exec.
    die_on(putenv(DEFAULT_PATH_ENV), "putenv"); // Specify the PATH used for execvpe
    execvpe(argv[0], argv, envp);
    die2("execvpe", argv[0]);
}