在单个函数调用中有没有简单的方法来实现fork()
和execve()
?像system()
之类的东西,但没有幕后的所有shell东西。
答案 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()函数将从指定的过程映像创建一个新进程(子进程)。新的过程映像应该从称为新进程的常规可执行文件构造 图像文件。