两个选项:使用传统的fork()或使用新的“ spawn”
使用fork
int subprocess_run(char *filename,char **args,FILE *std_in,FILE *std_out,FILE *std_err);
fflush(std_out) ;
fflush(std_err) ;
pid_t pid = fork() ;
if ( !pid ) {
// Child process,setup files,exec program,...
dup2(fileno(std_in)),STDIN_FILENO) ;
dup2(fileno(std_out)),STDOUT_FILENO) ;
dup2(fileno(std_err)),STDERR_FILENO) ;
execvp(filename,args) ;
perror("exevcp failed") ;
} else if ( pid == -1 ) {
// Error
...
} else {
// Parent
...
} ;
}
请注意,根据execvp的要求,“ args”应包括程序名称argv [0]。否则,您将必须构造新的数组。
使用posix_spawn
'posix_spawn'提供了与上述相同的接口,但是需要更复杂的设置(针对此处描述的问题)。它为某些系统提供了次要优势,因为它可以减少分叉的开销。如果需要,请查看man posix_spawn
。
本文链接:https://www.f2er.com/3130878.html