You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 03:15:38