昨天遇到一个问题,背景是这样的:我们工作环境不正常,使用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
- 浏览: 343051 次
- 性别:
- 来自: 北京
最新评论
-
zqb666kkk:
有示例代码吗
WebService CXF学习(高级篇3):WS-Security -
zhujiangtaobl0505:
楼主有源码没?发下,我邮箱465971531@qq.com,我 ...
WebService CXF学习(高级篇2):CXF+Spring+Hibernate -
ssy341:
http://localhost:8080/jforum/in ...
JForum安装详解 -
songzht:
看了上面的代码,这两个类型是怎么定义的?private Bas ...
JfreeChar结合struts2展示柱状图和饼状图(已解决乱码问题) -
Getwaysun:
持久化类中使用boolean定义某个字段后,报Null val ...
null不能赋值给int类型,Integer可以。
相关推荐
在Linux系统管理中,了解如何根据进程号(PID)查找启动程序的全路径是一项重要的技能,尤其是在处理异常进程或优化系统性能时。当面临类似网络异常、服务器发送异常数据包的问题时,这一技巧显得尤为关键。下面我们...
标题“通过PID获取进程路径”所指的,就是利用进程ID(PID)来查找该进程执行时所在的文件路径。在Windows环境下,这个功能在调试、监控或者管理进程中非常实用。 描述中提到的“vs2010代码”表明我们可以使用...
本文将详细介绍如何通过编写Linux进程检测脚本来实现对特定程序的监控与自动重启。 首先,我们要理解“进程”是操作系统中的一个基本概念,它代表了正在执行的程序实例。每个进程都有自己的内存空间和系统资源,...
Linux 查找进程及终止进程操作的相关命令 Linux 操作系统中,查找和终止进程是非常重要的操作。为了帮助用户更好地管理进程,本文将详细介绍 Linux 中查找和终止进程的相关命令。 查找进程的命令:ps ps 命令是 ...
当需要深入了解某个进程时,知道其进程ID(PID)是至关重要的。这篇文章将详细介绍如何通过PID号找到对应的进程名及所在目录。 首先,PID(Process ID)是系统为每个运行中的进程分配的唯一标识符。在Linux中,可以...
其中,“PID”列显示的是进程ID,我们需要的就是这个值。 2. **使用kill命令终止进程**: 找到Tomcat进程的PID后,可以通过`kill`命令强制终止该进程。 ```bash kill -9 PID ``` 例如,假设Tomcat的PID为5144...
或者,如果需要更精确地控制,可以查找进程ID并逐个终止: ```bash PID=$(ps aux | grep 'java -jar /opt/apps/myapp/service-a.jar' | awk '{print $2}') if [ ! -z "$PID" ]; then kill -9 $PID fi ``` 以上...
在Linux中,`fuser`命令可以找出占用特定端口的进程ID,如 `fuser -n tcp 8080`,它会列出使用8080端口的进程。另一个实用命令是`netstat -anp`,结合正则表达式筛选,如 `netstat -anp | grep ":8080[[:blank:]]"`...
如果需要获取某个特定进程的路径,可以通过其PID来查找,如`readlink /proc/PID/exe`,其中PID替换为实际进程ID,将会返回进程主可执行文件的绝对路径。 了解和熟练掌握这些命令对于系统管理员来说至关重要,它可以...
为了停止应用,我们需要找到对应的进程ID。可以使用`pgrep`命令查找与jar包相关的进程: ```bash stop() { PID=$(pgrep -f "$JAR_FILE_PATH") if [ -n "$PID" ]; then kill -9 $PID echo "Application stopped....
Socket是Linux系统中的一种进程间通信机制,尤其适用于跨网络的通信。然而,Socket本身并不直接支持多进程间的实时通信,因为它们不提供同时等待和超时处理功能。为了解决这个问题,我们可以采用一种策略,即创建一...
- 设置进程ID和组ID - 设置信号处理函数 - 初始化网络接口 这些初始化步骤确保了`init`进程能够顺利地进行后续的工作。 ##### 3.3 核心任务二: 解析和执行init.rc文件 `init.rc`文件是一个配置文件,它定义了`...
在Linux环境中,管理和部署Java应用程序,特别是Spring Boot应用,通常会使用Shell脚本来自动化启动、停止等操作。本文将详细讲解如何编写一个用于启动和停止Spring Boot jar程序的Shell脚本,以及脚本中涉及的关键...
例如,打开两个终端窗口,每个窗口都有一个bash进程,尽管它们都是bash程序的实例,但具有各自的进程ID。 并发执行是现代操作系统的基础特性,它使得系统能够在一段时间内处理多个任务,给人一种同时运行多个进程的...
在Linux或Unix系统中,通常使用`jps`(Java进程查看器)命令找到Java进程ID,然后使用`kill`命令终止进程。一个简单的`stop.sh`脚本可能如下所示: ```bash #!/bin/bash # 查找Java进程 JAVA_PROCESS=$(jps | grep...
`ps -ef`是一个常用的组合选项,它会列出所有活动的进程,包括进程ID(PID)、父进程ID(PPID)、用户、进程状态、启动时间等基本信息。然而,当需要更详细的信息,如进程的启动命令或文件路径时,`ps`命令可能无法...
`getpwuid`根据用户ID返回用户信息结构体,`gethostname`则获取系统主机名。 5. **进程创建(`fork`)**:在`ChildProcess`函数中,使用`fork`创建子进程。`fork`返回两次,一次在父进程中返回子进程的PID,一次在...
在Linux内核中,PCB由`struct task_struct`结构体表示,包含了如进程ID、状态、寄存器上下文、虚拟地址空间、文件描述符、用户ID和资源限制等信息。 环境变量是操作系统中用于设定进程运行环境的关键参数,它们以...
在Linux环境下启动Java项目是许多开发人员和系统管理员必须掌握的基本技能。这涉及到对Java开发工具(JDK)的理解、项目结构、启动脚本以及Linux命令行操作。下面将详细介绍在Linux下启动Java项目的步骤和相关知识点...