Linux下,如果某些程序启动的时候没有加上绝对路径,直接在当前目录用“./程序名 参数表”的方式启动的话,使用ps或者top命令查看后台进程的时候,显示的Comand栏也只是“./程序名 参数表”的形式,为了找到该程序的绝对路径,想必大家最先想到的是用find命令全盘搜索,但是这样做的代价太大,而且当有多个同名文件时还不一定能区分开来,这里教大家一个更简单有效的办法。    

因为任何一个程序启动以后,Linux系统会为其分配一个ID,即我们熟悉的PID,称为进程号,与此同时,系统会在/proc目录下为其创建一个独立的文件夹,文件夹以PID命名,在该文件夹内保存着该进程运行相关的详细信息,有兴趣的朋友可以进到这个目录下好好研究研究,不过今天的重点是获得该进程的绝对路径。在该目录下有一个名为exe的文件,像Windows系统下的可执行文件,这其实是一个符号链接(类似于Windows下的快捷方式),它指向该进程对应程序的绝对路径。用file命令或ls命令查看该符号链接的属性即可获取它所指向的绝对路径。

  1. ls -l /proc/PID/exe  

  2. file /proc/PID/exe  

将PID替换为你想查看的进程号即可,注意两条命令都需要root权限运行,Ubuntu下加sudo即可。

Linux下查看进程绝对路径

Linux下查看进程绝对路径

注:此方法仅在bash下测试有效。

ps -el | grep hello

ls -l /proc/19120/exe | awk '{print $11}'

hello是某程序的名字,ps -el | grep hello 命令把是hello名字进程全部列出来。

然后,加入要查看进程号PID为19120的可执行程序路径,ls -l /proc/19120/exe | awk '{print $11}'


写一个脚本获取指定进程名字的绝对路径,该脚本匹配包含参数1的进程名,列出所有进程的可执行程序的路径。

脚本文件psd 如下

#! /bin/bash
             
   if [ $# -ne 1 ] ; then
       echo "Usage: psd exe"
       exit 1
   fi
             
   for pid in `ps -e | grep $1 | awk '{print $1}'` ;
   do
      echo -n "${pid} "
      ls -l /proc/${pid}/exe | awk '{print $11}'
  done
本文转自 http://www.cnblogs.com/gaohuag/archive/2012/10/25/2738685.html