场景:
java 应用不同于其它程序,在ps查看时程序名都是
/usr/.../java -classpath ..... class
很长的话,查看起来非常不方便,但是一般来说每个应用都是放在单独并具有有意义的应用名的目录下,如果可以把特定应用的java进程的工作目录显示出来,那么就很容易标志某个应用了,进而可以对这个应用的进程进行kill等操作了。
linux提供了 proc 虚拟文件系统,其中的 /proc/PID/cwd 正是进程的工作目录,那么通过
1。读取 ps
2。对 java 进程过滤
3。显示java进程工作目录以及pid
即可定位特定应用的java进程。
shell:
#!/bin/sh
#过滤java进程
listpids()
{
#ps -ef|grep java
COLUMNS=1024 ps h -C java -f
}
#显示全部java工作目录
showpids()
{
while read u p pp t1 t2 tty cpu cmd;
do
ls -l /proc/$p/cwd
echo $p $cwd $cmd
echo
done
}
#查询应用名或java类的相关进程,显示工作目录
showpidof()
{
while read u p pp t1 t2 tty cpu cmd;
do
if ls -l /proc/$p/cwd | grep -q $1; then
ls -l /proc/$p/cwd
echo $p $cmd
echo
elif echo $cmd | grep -q $1; then
ls -l /proc/$p/cwd
echo $p $cmd
echo
fi
done
}
if [ "$1" ]; then
listpids | showpidof $1
else
listpids | showpids
fi