linux - 可执行文件可以动态解析其在文件系统上的位置或其实际的 "resting place"与用户的工作目录吗?

标签 linux go path pid working-directory

如果我在/usr/bin中有一个可执行文件当我位于 ~/dev/wikis/ 时调用它(即 user@HAL:~/dev/wikis$ the_executable ), ioutil.ReadFile("file.txt")可执行文件中的函数将在 /home/user/dev/wikis/file.txt 中查找,但是有可能让它看起来在 /usr/bin/file.txt 中吗?相反,用户或开发人员事先不知道可执行文件将位于 /usr/bin (它也可以位于 /home/user/dev/my_program/the_executable )?

然后为了增加一层复杂性,另一种情况是,假设我从 /usr/bin 中的符号链接(symbolic link)调用可执行文件。可执行文件的“源”实际上位于/home/user/dev/my_program/the_executable中,我希望程序了解 /home/user/dev/my_program/在这种情况下,是动态的,而不是 /usr/bin .

简而言之:可执行文件如何动态解析其在文件系统上的位置或其实际“休息位置”与用户的工作目录(可以通过 os.Getwd() 轻松获取,并且其他命令如 ioutil.ReadFile 使用或使用类似的命令来解析路径)。

我最好的选择是,我必须获取正在运行的程序的 PID ( os.Getpid ),然后以某种方式使用该整数来访问有关在该 PID 下运行的程序实例的信息,并希望该信息包含一个字符串然后我就可以使用它的目录了。

最佳答案

在 Linux 中(也许在其他 Unixy 系统中),您会在 /proc/pid/exe 下找到一个指向以 pid 身份运行的实际可执行文件的符号链接(symbolic link),检查如果它是二进制文件,它就会给出你想要的东西。如果它是某种脚本,那可能只会给解释器。

但请注意,完全有可能启动一个进程并在运行时删除可执行文件,留下悬空链接或什么都不留下。

关于linux - 可执行文件可以动态解析其在文件系统上的位置或其实际的 "resting place"与用户的工作目录吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33160412/

相关文章:

linux - 如何让vimrc修改生效

php - 使用部署在 CentOS 服务器上的 Latchet 框架时,无法从 webapp 的 JS 建立 websocket 连接

performance - 为什么在 Golang 中迭代 map 比迭代 slice 慢得多?

pointers - t =&T {}和t = new(T)之间的核心区别是什么

batch-file - 管理带有重音字符的路径

pydev eclipse 中谷歌应用程序引擎的 pythonpath

java - mapper执行的判断

linux - 使用非 root 用户帐户安装 Git

Google Go Lang 赋值顺序

c# - 如何省略文件路径压缩?