繁体   English   中英

fork-exec易于使用system()

[英]fork-exec with ease of use of system()

有没有简单的方法可以在单个函数调用中实现fork()execve() 类似system()的东西,但是没有幕后的所有东西。

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()调用失败,则此代码将无法处理

当然:

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;
}

对于POSIX系统,存在posix_spawn()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM