我正在使用 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;
}
示例代码将受到高度赞赏。
我尝试使用 fork 和 execlp c 函数来做到这一点。但我获取最多的是子进程的PID,而不是进程“B”的PID。
错误。
当您从子进程调用
execlp
函数时,program_name
中包含的程序替换在子进程中运行的程序。
所以父进程中
fork
返回的进程ID就是进程B的PID。