fork-exec易于使用的系统()

时间:2013-10-04 14:12:22

标签: c

在单个函数调用中有没有简单的方法来实现fork()execve()?像system()之类的东西,但没有幕后的所有shell东西。

3 个答案:

答案 0 :(得分:2)

pid_t 
fork_and_execve(const char *path, char *const argv[], char *const envp[])
{
    pid_t child_pid;
    child_pid = fork();
    if (0 == child_pid) {
        execve(path, argv, envp);
    } else {
        return child_pid;
    }
}

请注意,如果execve()调用失败,则此代码无法处理

答案 1 :(得分:2)

不确定

pid_t start(char *cmd, char **argv, char **envp) {
    pid_t child = fork();
    if(child == 0) {
        execve(cmd, argv, envp);
        _exit(1);
    }
    return child;
}

int invoke(char *cmd, char **argv, char **envp) {
    int status;
    waitpid(start(cmd, argv, envp), &status);
    return status;
}

答案 2 :(得分:0)

对于POSIX系统,存在posix_spawn()

  

posix_spawn() posix_spawnp()函数将从指定的过程映像创建一个新进程(子进程)。新的过程映像应该从称为新进程的常规可执行文件构造          图像文件。