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