Skip to content

为 (liii os) 模块实现 getppid #928

Description

@da-liii

目标

(liii os) 模块中实现 getppid 函数,对标 Python 的 os.getppid(),返回当前进程的父进程 ID。

背景

(liii os) 目前已有 getpid(见 goldfish/liii/os.scm),但缺少 getppid。Python 的 os.getppid() 在 POSIX 和 Windows 上均可用:

  • POSIX:通过 getppid() 系统调用获取
  • Windows:需要通过 CreateToolhelp32Snapshot + Process32First/Process32Next 遍历进程快照获取父进程 ID

实现方案

优先调研 tbox:项目已经依赖 tbox(src/liii_os.cpp 中已包含 tbox/platform/file.htbox/platform/path.h 等),实现前先看 tbox 是否已提供跨平台的父进程 ID 获取接口(查 tbox 的 platform 模块),有则直接复用,避免手写平台相关代码。

  1. src/liii_os.cpp 中新增 g_getppid(参考现有 g_getpid 的实现方式),向 S7 注册
    • 若 tbox 没有现成接口,再回退到平台实现:POSIX 用 getppid() 系统调用;Windows 用 CreateToolhelp32Snapshot + Process32First/Process32Next 遍历进程快照
  2. goldfish/liii/os.scm 中导出并定义 getppid
  3. tests/goldfish/liii/os/ 下新增 getppid-test.scm 测试文件

验收标准

  • (getppid) 返回一个正整数(父进程 PID)
  • POSIX(Linux/macOS)下与 shell 中 ps -o ppid= -p $$ 结果一致
  • Windows 下与任务管理器/PowerShell 中的父进程 PID 一致
  • 测试文件通过:bin/gf tests/goldfish/liii/os/getppid-test.scm
  • 执行 bin/gf doc --build-json 更新函数索引

相关文件

  • goldfish/liii/os.scm
  • C 实现参考现有 g_getpid 所在文件
  • tests/goldfish/liii/os/

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions