C - 在后台启动外部程序并获得pid

时间:2017-04-16 17:45:57

标签: c linux fork

在C中,运行外部程序并获得此程序的PID的最佳方法是什么? 我在这里看到了一些关于使用fork()的答案......但是据我所知,fork()复制了当前的proccess并创建了一个子节点。如果可能的话,我想创建一个完全分离的上下文......并且获得PID的原因是将来杀死这个完全过程。当我的服务器发送命令以启动客户端上的某些程序时,我正在构建客户端/服务器程序。这些程序是外部的,多于一个c同名/可执行文件可以同时运行(这就是为什么我不能'尝试'通过程序名找到pid)。此外,这些程序应该在'后台'运行....我的意思是,我无法锁定我的调用函数。 我不确定fork()是否会在这种情况下帮助我。

1 个答案:

答案 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;
}
相关问题