getppid() 系统调用在 Linux 系统中用于获取当前进程的父进程 ID。 然而,标准的 getppid() 函数并不能直接获取指定进程的父进程 ID。 上面的代码示例中,getppid(target_pid) 的用法是错误的。 getppid() 函数没有参数。
为了获取指定进程的父进程 ID,需要使用 /proc 文件系统。 以下是一个更正后的代码示例,它能够获取指定进程的父进程 ID:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <dirent.h> #include <string.h> int main(int argc, char *argv[]) { if (argc != 2) { fprintf(stderr, "Usage: %s <pid> ", argv[0]); return 1; } pid_t target_pid = atoi(argv[1]); char path[256]; snprintf(path, sizeof(path), "/proc/%d/stat", target_pid); FILE *fp = fopen(path, "r"); if (fp == NULL) { perror("fopen"); return 1; } char buffer[1024]; fgets(buffer, sizeof(buffer), fp); fclose(fp); char *token = strtok(buffer, " "); for (int i = 0; i < 3; ++i) { token = strtok(NULL, " "); } pid_t parent_pid = atoi(token); printf("Parent process ID of PID %d is %d ", target_pid, parent_pid); return 0; }登录后复制
这个程序通过读取 /proc//stat 文件来获取进程信息。 该文件包含进程的各种信息,包括父进程 ID。 程序解析该文件,提取并打印父进程 ID。
编译和运行方法与之前相同:
gcc getppid_parent.c -o getppid_parent ./getppid_parent <pid>登录后复制
请记住,只有具有足够权限的用户才能访问 /proc 文件系统中的信息。
本文来自投稿,不代表本站立场,如若转载,请注明出处: