linux如何根据进程ID查找启动程序的路径

http://blog.csdn.net/eijnew/article/details/6185872

昨天遇到一个问题,背景是这样的:我们工作环境不正常,使用ps命令查看,发现有程序A的两个进程状态一个是<defunct>状态,一个是正常运行.由于该程序A是个通用服务程序,被拷贝成多份,分发到不同的目录中单独启动,只有各自配置不同而已,因此想知道是哪个目录的A程序处于僵死状态.

正常运行中的进程树关系如下(为了简化,只显示一部分进程):

$psx

PIDTTYSTATTIMECOMMAND

17279pts/8Ss0:00-bash

18618pts/8R+0:00psxf

18283pts/8S0:00A

18284pts/8S0:00A

18321pts/8S0:00a

18322pts/8S0:00a

出问题时进程的状态为:

$psx

PIDTTYSTATTIMECOMMAND

17279pts/8Ss0:00-bash

18618pts/8R+0:00psxf

18283pts/8Z0:00A<defunct>

18284pts/8S0:00A

18321pts/8S0:00a

18322pts/8S0:00a

找到某进程启动路径的方法是:

1.我们可以从ps命令中得到僵死进程的PID,如上例中18283.

2.进入/proc目录下以该PID命名的目录中

3.输入ls-l,结果中exe链接对应的就是可执行文件的全路经

$ls-l/proc/18283

总计0

dr-xr-xr-x2qhkfqhkf001-0611:14attr

-r--------1qhkfqhkf001-0611:14auxv

-r--r--r--1qhkfqhkf001-0610:38cmdline

-r--r--r--1qhkfqhkf001-0611:14cpuset

lrwxrwxrwx1qhkfqhkf001-0611:14cwd->/v8t/qhkf/risk_b/kssmdb

-r--------1qhkfqhkf001-0611:14environ

lrwxrwxrwx1qhkfqhkf001-0611:14exe->/v8t/qhkf/risk_b/kssmdb/A

dr-x------2qhkfqhkf001-0610:38fd

-rw-r--r--1qhkfqhkf001-0611:14loginuid

-r--r--r--1qhkfqhkf001-0611:14maps

-rw-------1qhkfqhkf001-0611:14mem

-r--r--r--1qhkfqhkf001-0611:14mounts

-r--------1qhkfqhkf001-0611:14mountstats

-r--r--r--1qhkfqhkf001-0611:14numa_maps

-rw-r--r--1qhkfqhkf001-0611:14oom_adj

-r--r--r--1qhkfqhkf001-0611:14oom_score

lrwxrwxrwx1qhkfqhkf001-0611:14root->/

-r--r--r--1qhkfqhkf001-0611:14schedstat

-r--------1qhkfqhkf001-0611:14smaps

-r--r--r--1qhkfqhkf001-0610:38stat

-r--r--r--1qhkfqhkf001-0611:14statm

-r--r--r--1qhkfqhkf001-0610:38status

dr-xr-xr-x6qhkfqhkf001-0611:14task

-r--r--r--1qhkfqhkf001-0611:14wchan

剩下的就是排查问题了.OVER.

相关推荐