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

标签 c linux fork

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

最佳答案

我喜欢做的是使用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;
}

关于C - 在后台启动外部程序并获取pid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43440183/

相关文章:

linux - 比较两个文件并在第二个文件中没有值时添加零

swift - 如何在 Linux 上的 Swift 中生成 RSA key 对?

c - 使用 GCC "-Wextra"选项编译时如何初始化 C 结构而不产生警告?

c - 如何从使用 gtk 回调调用的函数返回值?

linux - 如何将 xinit 和 xsetroot 串在一行中?

c++ - 如何使用 fork 和 execv 获取程序的 pid

c - fork() 是如何工作的?

c - fork () : Number of child processes created

复制结构体和数组

c - 如何检查命令行中的输入是C中的整数?