如何使用 execlp c 函数获取从另一个进程启动的进程的 PID?

问题描述 投票:0回答:1

我正在使用 Debian(类似 Linux)操作系统,用 c 编写代码。 我是一个正在运行的进程(我们称之为“A”),它需要启动一个可执行程序并在新进程“B”开始运行时获取其 PID。 进程“A”和“B”都必须保持运行(即任一进程都不得终止)。

我的问题: 一旦启动了进程“A”,如何才能获取进程“B”的PID?

我尝试使用 fork 和 execlp c 函数来做到这一点。但我获得最多的是子进程的PID,而不是进程“B”的PID。我为此使用的测试代码如下所示:

int main() {
  pid_t child_pid = fork();

  if (child_pid == 0) {
    // Child process
    char *program_name = "my/Path";            // Path
    char *arguments[] = {"Process_B", NULL};   // Program to be launched

    if (execlp(program_name, arguments[0], NULL) == -1) {
      perror("execlp_error");
      return 1;
    }
  } else if (child_pid > 0) {
    // Parent process
    printf("Parent process (PID: %d) launched child with PID: %d\n", getpid(), child_pid);

  } else {
    perror("fork_error");
    return 1;
  }

  return 0;
}

示例代码将受到高度赞赏。

c pid launch
1个回答
0
投票

我尝试使用 fork 和 execlp c 函数来做到这一点。但我获取最多的是子进程的PID,而不是进程“B”的PID。

错误。

当您从子进程调用

execlp
函数时,
program_name
中包含的程序替换在子进程中运行的程序。

所以父进程中

fork
返回的进程ID就是进程B的PID。

© www.soinside.com 2019 - 2024. All rights reserved.