- Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。
- /proc/N pid为N的进程信息
- /proc/N/cmdline 进程启动命令
- /proc/N/cwd 链接到进程当前工作目录
- /proc/N/environ 进程环境变量列表
- /proc/N/exe 链接到进程的执行命令文件
- /proc/N/fd 包含进程相关的所有的文件描述符
- /proc/N/maps 与进程相关的内存映射信息
- /proc/N/mem 指代进程持有的内存,不可读
- /proc/N/root 链接到进程的根目录
- /proc/N/stat 进程的状态
- /proc/N/statm 进程使用的内存的状态
- /proc/N/status 进程状态信息,比stat/statm更具可读性
#!/bin/bash
RES_COLOR="\E[0m"
RED_COLOR="\E[1;31m"
GREEN_COLOR="\E[1;32m"
YELOW_COLOR="\E[1;33m"
BLUE_COLOR="\E[1;34m"
PINK_COLOR="\E[1;35m"
if [ $# -ne 1 ] ; then
echo -e ${RED_COLOR} "Usage: pwatch exe" ${RES_COLOR}
exit 1
fi
for pid in `ps aux | grep $1 | awk '{print $2}'` ;
do
if [ -d "/proc/${pid}" ]; then
echo -ne "${pid} "
# echo -e ${BLUE_COLOR} `cat -v /proc/${pid}/cmdline` ${RES_COLOR}
echo -e ${BLUE_COLOR} `ps aux | awk '{if($2=="'${pid}'") for(i=11;i<=NF;i++) printf("%s ", $i)}'` ${RES_COLOR}
echo -e ${GREEN_COLOR} EXE: `ls -l /proc/${pid}/exe 2>/dev/null | awk '{print $NF}'` ${RES_COLOR}
echo -e ${GREEN_COLOR} PWD: `ls -l /proc/${pid}/cwd 2>/dev/null | awk '{print $NF}'` ${RES_COLOR}
fi
done
➜ ~ ./pwatch.sh vim
27609 vim log.cpp
EXE: /usr/bin/vim
PWD: /home/service/common
35772 vim worker.cpp
EXE: /usr/bin/vim
PWD: /home/service/app/src