目前我正在尝试将用 C 编写的终端模拟器从 Linux 移植到 FreeBSD。但是终端会尝试从父进程获取当前工作目录 (CWD)。
它通过访问/proc/$PID/cwd.
现在我正在寻找一种方法来用在 FreeBSD 上运行的东西来替换这个功能。
那么如何从 FreeBSD 的进程中获取 CWD?
甚至有符合 POSIX 的解决方案吗?
我知道我可以从我的进程中获取 CWD,getcwd但我需要父进程的 CWD,我只知道 PID。
嗯,实际上你有两种可能性。其中之一是使用 shell 实用程序,如lsof -p, fstat -p(正如我在上面的评论中提到的那样)或另一个命名procstat为here 的实用程序。随着procstat该解决方案将是这样的:
procstat -f <pid> | awk '$3 == "cwd" { print $10 }'
Run Code Online (Sandbox Code Playgroud)
另一种可能的解决方案是使用libprocstat库调用,特别是procstat_getfiles()在 C 程序中获取完整信息。查看procstat 源以获得 API 使用示例。