在C中,运行外部程序并获得此程序的PID的最佳方法是什么? 我在这里看到了一些关于使用fork()的答案......但是据我所知,fork()复制了当前的proccess并创建了一个子节点。如果可能的话,我想创建一个完全分离的上下文......并且获得PID的原因是将来杀死这个完全过程。当我的服务器发送命令以启动客户端上的某些程序时,我正在构建客户端/服务器程序。这些程序是外部的,多于一个c同名/可执行文件可以同时运行(这就是为什么我不能'尝试'通过程序名找到pid)。此外,这些程序应该在'后台'运行....我的意思是,我无法锁定我的调用函数。 我不确定fork()是否会在这种情况下帮助我。
答案 0 :(得分:0)
我喜欢做的是使用posix_spawn
。它比fork
更容易使用,IMO感觉更直观:
#include <spawn.h>
#include <string.h>
#include <stdio.h>
extern char **environ;
int main() {
pid_t pid;
char *argv[] = {"gcc", "file.c" (char*)0};
int status = posix_spawn(&pid, "/usr/bin/gcc", NULL, NULL, argv, environ);
if(status != 0) {
fprintf(stderr, strerror(status));
return 1;
}
return 0;
}