昨天遇到一个问题,背景是这样的:我们工作环境不正常,使用ps命令查看,发现有程序A的两个进程状态一个是<defunct>状态,一个是正常运行.由于该程序A是个通用服务程序,被拷贝成多份,分发到不同的目录中单独启动,只有各自配置不同而已,因此想知道是哪个目录的A程序处于僵死状态. 正常运行中的进程树关系如下(为了简化,只显示一部分进程): $ ps x PID TTY STAT TIME COMMAND 17279 pts/8 Ss 0:00 -bash 18618 pts/8 R+ 0:00 ps xf 18283 pts/8 S 0:00 A 18284 pts/8 S 0:00 A 18321 pts/8 S 0:00 a 18322 pts/8 S 0:00 a 出问题时进程的状态为: $ ps x PID TTY STAT TIME COMMAND 17279 pts/8 Ss 0:00 -bash 18618 pts/8 R+ 0:00 ps xf 18283 pts/8 Z 0:00 A<defunct> 18284 pts/8 S 0:00 A 18321 pts/8 S 0:00 a 18322 pts/8 S 0:00 a 找到某进程启动路径的方法是: 1.我们可以从ps命令中得到僵死进程的PID,如上例中18283. 2.进入/proc目录下以该PID命名的目录中 3.输入ls -l ,结果中 exe链接对应的就是可执行文件的全路经 $ ls -l /proc/18283 总计 0 dr-xr-xr-x 2 qhkf qhkf 0 01-06 11:14 attr -r-------- 1 qhkf qhkf 0 01-06 11:14 auxv -r--r--r-- 1 qhkf qhkf 0 01-06 10:38 cmdline -r--r--r-- 1 qhkf qhkf 0 01-06 11:14 cpuset lrwxrwxrwx 1 qhkf qhkf 0 01-06 11:14 cwd -> /v8t/qhkf/risk_b/kssmdb -r-------- 1 qhkf qhkf 0 01-06 11:14 environ lrwxrwxrwx 1 qhkf qhkf 0 01-06 11:14 exe -> /v8t/qhkf/risk_b/kssmdb/A dr-x------ 2 qhkf qhkf 0 01-06 10:38 fd -rw-r--r-- 1 qhkf qhkf 0 01-06 11:14 loginuid -r--r--r-- 1 qhkf qhkf 0 01-06 11:14 maps -rw------- 1 qhkf qhkf 0 01-06 11:14 mem -r--r--r-- 1 qhkf qhkf 0 01-06 11:14 mounts -r-------- 1 qhkf qhkf 0 01-06 11:14 mountstats -r--r--r-- 1 qhkf qhkf 0 01-06 11:14 numa_maps -rw-r--r-- 1 qhkf qhkf 0 01-06 11:14 oom_adj -r--r--r-- 1 qhkf qhkf 0 01-06 11:14 oom_score lrwxrwxrwx 1 qhkf qhkf 0 01-06 11:14 root -> / -r--r--r-- 1 qhkf qhkf 0 01-06 11:14 schedstat -r-------- 1 qhkf qhkf 0 01-06 11:14 smaps -r--r--r-- 1 qhkf qhkf 0 01-06 10:38 stat -r--r--r-- 1 qhkf qhkf 0 01-06 11:14 statm -r--r--r-- 1 qhkf qhkf 0 01-06 10:38 status dr-xr-xr-x 6 qhkf qhkf 0 01-06 11:14 task -r--r--r-- 1 qhkf qhkf 0 01-06 11:14 wchan 剩下的就是排查问题了.OVER.