【发布时间】:2022-10-17 20:45:23
【问题描述】:
我正在尝试来自 shell 脚本的给定 PPID 的绝对路径。 但是,父进程可以是任何类型的脚本(bash/csh/zsh/tsh/Makefile)。
子进程始终是一个 bash 脚本,并且是我可以编辑的唯一脚本。
我努力了:
-
ps --no-headers -o command $PPID但它只获取调用父进程的命令。这不是我需要的,因为父级可能在脚本中造成了一些 cd,我将无法解析命令中的相对路径。 -
ls -l /proc/$PPID/fd/255这是最接近我想要的,但这是特定于 bash 脚本的,正如我所提到的,我无权知道我的父进程的脚本类型。 -
/proc/$PPID/exe返回二进制 exe,我需要使用此二进制文件的脚本的绝对路径。
【问题讨论】:
-
无法以适用于所有解释语言的方式找到此信息。对于某些语言,这可能是完全不可能的。例如,我不确定 Makefile 的“绝对路径”是什么意思。您的意思是对于给定的 make 运行实例,您想从其他进程中找到它正在运行的 makefile 的名称。那是完全不可能的。我不知道 bash 技巧,但我不会依赖它总是如此,其他人也是如此。
-
您最好的选择可能是
/proc/$PPID/cmdline,但请注意,程序可以选择将其设置为任何他们想要的。 -
试试这个
ps -eo pid,cmd | grep $pid -
@Ivan,
ps在足够现代的 Linux 上通过读取 procfs 来工作,因此它是一个比 procfs 本身更不直接的工具。