- 浏览: 149338 次
- 性别:
- 来自: 北京
文章分类
最新评论
http://blog.csdn.net/eijnew/article/details/6185872
昨天遇到一个问题,背景是这样的:我们工作环境不正常,使用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.
昨天遇到一个问题,背景是这样的:我们工作环境不正常,使用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.
发表评论
-
用vim比较文件
2013-09-17 10:07 8371. 使用vim的比较模式 ... -
linux去掉文件重复行
2013-08-28 18:20 880linux去掉文件重复行 在统计某些数据的时候,文件 ... -
linux下释放内存的cache
2013-07-31 13:03 905虽然内存cache对文件系统有加速,但是cache太多的文件 ... -
查看linux机器cpu信息
2013-06-27 17:27 544查看几核 cat /proc/cpuinfo | grep ... -
awk常用问题集锦
2012-12-07 15:38 820http://www.cnblogs.com/27681507 ... -
Linux中expr命令
2012-12-05 18:04 831http://blog.csdn.net/guhong5153 ... -
shell里面如何获取字符串长度--判断字符串为空
2012-12-05 18:04 1963#/bin/bashstr=12313; le1=`expr ... -
Linux中date命令
2012-12-05 17:35 3071Linux中date命令用法 1、以下是服务器现在的时 ... -
linux date得到当前时间的毫秒
2012-12-05 16:45 18009echo `expr \`date +%s%N\` / 100 ... -
Linux系统管理员应该知道的20个系统监控工具
2012-11-10 17:43 720http://bbs.chinaunix.net/thread ... -
LINUX SHELL 中 2>&1 重定向的问题
2012-07-31 15:17 1009转载http://blog.csdn.net/past ... -
shell 脚本中$$,$#,$?
2012-07-31 14:53 686$0 这个程式的执行名字 $n 这个程式的第n个参数值,n=1 ... -
linux shell getopts
2012-07-19 18:28 4309#getopts ALL=false HELP=false F ... -
awk基础
2011-12-14 14:37 8501、awk 语法分模式和操 ... -
linux rsync同步设置详细指南
2011-08-24 17:43 1242linux rsync同步设置详细指南 配置rsync 同步数 ... -
shell分割字符串
2011-06-16 14:58 1739#!/bin/sh ids="1,2,3,4, ... -
linux scp无密码
2011-06-07 17:14 1558原理: 密匙认证需要依靠密匙,首先创建一对密匙(包括公匙和 ... -
查看Linux操作系统的版本
2011-05-27 10:30 15232.4.26是内核的版本号,内核的版本号是Linus领导下的开 ... -
java调用shell,并得到shell的输出
2011-05-26 15:31 3289import java.io.IOException; ... -
把awk中的数组赋值给shell中的数组
2011-05-26 15:20 11824方法1,通过eval #!/bin/bash ipstr ...
相关推荐
在Linux系统管理中,了解如何根据进程号(PID)查找启动程序的全路径是一项重要的技能,尤其是在处理异常进程或优化系统性能时。当面临类似网络异常、服务器发送异常数据包的问题时,这一技巧显得尤为关键。下面我们...
标题“通过PID获取进程路径”所指的,就是利用进程ID(PID)来查找该进程执行时所在的文件路径。在Windows环境下,这个功能在调试、监控或者管理进程中非常实用。 描述中提到的“vs2010代码”表明我们可以使用...
本文将详细介绍如何通过编写Linux进程检测脚本来实现对特定程序的监控与自动重启。 首先,我们要理解“进程”是操作系统中的一个基本概念,它代表了正在执行的程序实例。每个进程都有自己的内存空间和系统资源,...
Linux 查找进程及终止进程操作的相关命令 Linux 操作系统中,查找和终止进程是非常重要的操作。为了帮助用户更好地管理进程,本文将详细介绍 Linux 中查找和终止进程的相关命令。 查找进程的命令:ps ps 命令是 ...
其中,“PID”列显示的是进程ID,我们需要的就是这个值。 2. **使用kill命令终止进程**: 找到Tomcat进程的PID后,可以通过`kill`命令强制终止该进程。 ```bash kill -9 PID ``` 例如,假设Tomcat的PID为5144...
当需要深入了解某个进程时,知道其进程ID(PID)是至关重要的。这篇文章将详细介绍如何通过PID号找到对应的进程名及所在目录。 首先,PID(Process ID)是系统为每个运行中的进程分配的唯一标识符。在Linux中,可以...
或者,如果需要更精确地控制,可以查找进程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项目的步骤和相关知识点...