在Linux系统中,getppid()
函数可以获取当前进程的父进程ID,这是判断进程关系的基础方法之一。以下是几种判断进程关系的常用方法:
#include <unistd.h>
#include <stdio.h>
int main() {
pid_t my_pid = getpid();
pid_t parent_pid = getppid();
printf("My PID: %d\n", my_pid);
printf("Parent PID: %d\n", parent_pid);
return 0;
}
Linux的/proc
文件系统包含了丰富的进程信息:
# 查看进程1234的父进程ID
cat /proc/1234/stat | awk '{print $4}'
# 查看进程树关系
pstree -p
# 显示进程及其父进程
ps -ef
ps -o pid,ppid,cmd
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int is_parent_of(pid_t parent, pid_t child) {
char path[256];
FILE *fp;
pid_t ppid;
sprintf(path, "/proc/%d/stat", child);
fp = fopen(path, "r");
if (!fp) return 0;
// 跳过前3个字段(pid, comm, state),读取第4个字段(ppid)
fscanf(fp, "%*d %*s %*c %d", &ppid);
fclose(fp);
return (ppid == parent);
}
int main() {
pid_t child_pid = fork();
if (child_pid == 0) {
// 子进程
sleep(10); // 保持运行以便检查
} else {
// 父进程
if (is_parent_of(getpid(), child_pid)) {
printf("Process %d is parent of %d\n", getpid(), child_pid);
}
}
return 0;
}
#include <sys/types.h>
#include <unistd.h>
int is_child_of(pid_t child, pid_t parent) {
return (getppid() == parent);
}
getppid()
返回的是整个进程的父进程ID这些方法可以帮助你在Linux系统中准确判断和验证进程间的父子关系。