我正在编写一个脚本,它将使用正在运行的进程的文件名。但是,我无法确定某些进程的完整可执行文件名称。
最初,我决定查询中的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
实际上,它在可执行文件上执行重命名:
/tmp$ cp /bin/cat . ; ./cat & mv cat dog ; readlink /proc/$!/exe
/tmp/dog
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句