如何修改main()函数以列出主进程的所有父进程直至根进程
实现进程父进程链遍历(仅修改main函数)
问题需求
修改现有C代码的main()函数,实现从当前进程出发,遍历至根进程(PID为1)的完整父进程链,输出每个进程的PID、父进程PID及对应命令。现有代码仅能打印自身进程信息,需完成完整链路遍历。
修改后的main函数代码
int main(int argc, char *argv[]) { pid_t current_pid = getpid(); pid_t ppid; char* pname; // 打印顶部分隔线与表头 printf("-------------------------------------------------------------------\n"); print_header(); // 遍历进程链,直到根进程(PID=1) while (current_pid > 0) { get_ppid(current_pid, &ppid); pname = get_name(current_pid); print_process_info(current_pid, ppid, pname); free(pname); // 根进程的父进程是0,无需继续遍历 if (current_pid == 1) { break; } current_pid = ppid; } // 打印底部分隔线 printf("-----------------------------------------------------------------\n"); return 0; }
修改说明
- 用循环结构替代单次打印,从当前进程开始,逐步获取父进程PID并遍历,直到根进程(PID=1)
- 增加顶部、底部分隔线,匹配期望输出的格式
- 每次循环内完成进程信息的获取、打印,并释放
get_name动态分配的内存,避免内存泄漏 - 对根进程做特殊处理,打印后终止循环,避免尝试访问不存在的
/proc/0目录
内容的提问来源于stack exchange,提问作者novice
相关产品推荐
相关产品推荐

