ren*_*yun 5 process filenames proc
我正在编写一个脚本,它将使用正在运行的进程的文件名。但是,我无法确定某些进程的完整可执行文件名称。
最初,我决定查询中的Name条目/proc/PID/status(或中的第二个字段/proc/PID/stat)。但是,根据联机帮助页,该字段总是被截断为 15 个字符,但我需要全名以避免冲突/混淆。
这个问题的答案建议使用/proc/PID/cmdline,但也存在问题。一些程序(例如铬,电子)对值做了愚蠢/聪明的事情,/proc/PID/cmdline所以我不能只是在那里拆分数据NULL并直接获取联机帮助页中建议的程序名称 - 他们为原始内容填写了很多内容argv[0] 字段并用空格分隔它们,我不认为仅按空格拆分是一个不错的选择,因为路径/文件名可能包含空格。
当我发现某些脚本(例如 python 脚本)在表单中/usr/bin/python /path/to/script而有些在表单中时,这更加复杂/path/to/script。尽管只要我拥有该字段(没有如上所述的卡纸)并手动检查和拆分,这将更容易处理。
任何想法如何获取完整的程序名称/文件名?名称是否包含完整路径并不重要,因为这很容易处理(就我现在所见)。
/proc/$PID/exe似乎就是您要找的:(proc(5)
/proc/[pid]/exe
在 Linux 2.2 及更高版本下,此文件是一个符号链接,包含所执行命令的实际路径名。该符号链接可以正常取消引用;尝试打开它将打开可执行文件。
所以,简单地说:
$ /bin/cat & readlink /proc/$!/exe
/bin/cat
Run Code Online (Sandbox Code Playgroud)
它实际上遵循可执行文件的重命名:
/tmp$ cp /bin/cat . ; ./cat & mv cat dog ; readlink /proc/$!/exe
/tmp/dog
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7671 次 |
| 最近记录: |