在 Linux 中,getppid()
函数用于获取一个进程的父进程 ID
要判断进程关系,你可以使用 getppid()
函数递归地获取每个进程的父进程 ID,直到达到根进程(即父进程 ID 为 1 的进程)。以下是一个简单的示例:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
void print_process_tree(pid_t pid, int depth) {
if (pid > 0) {
printf("%s- %d\n", " " x depth, pid);
print_process_tree(getppid(pid), depth + 1);
}
}
int main() {
pid_t pid = getpid();
printf("Process tree starting from PID %d:\n", pid);
print_process_tree(pid, 0);
return 0;
}
这个程序首先获取当前进程的 PID,然后调用 print_process_tree()
函数递归地打印出从该进程开始的进程树。print_process_tree()
函数接受一个进程 ID 和一个表示深度的整数作为参数。对于每个进程,它首先检查进程 ID 是否大于 0(即不是无效的进程 ID),然后打印出进程 ID 和当前深度。接着,它递归地调用自身,传入父进程 ID 和深度加 1。
运行这个程序,你将看到类似以下的输出:
Process tree starting from PID 12345:
- 12345
- 12346
- 12347
- 12348
这表示进程 12345 有三个子进程:12346、12347 和 12348。从输出中可以看出,进程 12346 是进程 12345 的子进程,进程 12347 是进程 12346 的子进程,依此类推。