如何在Shell中通过PID获取完整准确的程序名称?
通过PID获取完整未截断程序名称的正确方法
很多人会用ps -p $PID -o comm=来通过PID获取程序名称,但这个命令的结果会被截断,比如:
$ pidof transmission-daemon 1169 $ ps -p 1169 -o comm= transmission-da
以下是几种能获取完整未截断程序名称的方法:
使用
ps的cmd字段:这个字段会输出完整的命令路径和名称,不会被截断ps -p 1169 -o cmd= # 输出示例:/usr/bin/transmission-daemon如果只想提取程序的basename,可以结合
basename命令:basename $(ps -p 1169 -o cmd=) # 输出示例:transmission-daemon直接读取
/proc文件系统(最可靠):- 读取完整命令行:
/proc/$PID/cmdline存储了进程的完整命令,内容用null字符分隔,用tr转换为空格即可正常显示cat /proc/1169/cmdline | tr '\0' ' ' # 输出示例:/usr/bin/transmission-daemon - 读取程序的完整路径:
/proc/$PID/exe是指向进程可执行文件的符号链接,用readlink获取路径后提取basenamebasename $(readlink /proc/1169/exe) # 输出示例:transmission-daemon
- 读取完整命令行:
内容的提问来源于stack exchange,提问作者luochen1990
相关产品推荐
相关产品推荐

