感谢支持
我们一直在努力

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

遇到一个问题,背景是这样的:我们工作环境不正常,使用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.

赞(0) 打赏
转载请注明出处:服务器评测 » Linux如何根据进程ID查找启动程序的路径
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏