Linux内核提供了一种通过/proc文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。 用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。下面列出的这些文件或子文件夹,并不是都是在你的系统中存在,这取决于你的内核配置和装载的模块。另外,在/proc下还有三个很重要的目录:net,scsi和sys。 Sys目录是可写的,可以通过它来访问或修改内核的参数,而net和scsi则依赖于内核配置。例如,如果系统不支持scsi,scsi目录不存在。 除了以上介绍的这些,还有的是一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的 PID号为目录名,它们是读取进程信息的接口。而self目录则是读取进程本身的信息接口,是一个link。
分别查找当前主机占用CPU和占用内存最大的进程,要求能查出进程PID,启动目录,启动命令,占用文件描述符数量,占用端口等。
#!/bin/bash
#Written by lhf 2017-11-13
#exam process status
echo “##############CPU info##############“
cpu_pid=`ps aux |sort -rnk3 |head -2 |grep -v 'USER' |awk '{print $2}'`
echo "占用CPU最大的进程的pid是: $cpu_pid"
cpu_pro=`cat /proc/$cpu_pid/comm`
echo "进程名称: $cpu_pro"
cpu_command=`ls /proc/$cpu_pid/cmdline`
echo "启动命令是: $cpu_command"
lsof -p $cpu_pid > /lhf/tmp/file1.txt
cpu_file_num=`wc -l /lhf/tmp/file1.txt |awk '{print $1}'`
echo "占用描述符数: $cpu_file_num"
cpu_port=`netstat -lntp |grep $cpu_pro |awk '{print $4}' |awk -F':' '{print $NF}'`
echo "端口: $cpu_port"
cpu_pro_dir=`ls -l /proc/$cpu_pid/cwd |awk '{print $NF}'`
echo "进程启动目录: $cpu_pro_dir"
echo “##########Memory info##########”
mem_pid=`ps aux |sort -rnk4 |head -2 |grep -v 'USER' |awk '{print $2}'`
echo "占用内存最大的进程的pid是: $mem_pid"
mem_pro=`cat /proc/$mem_pid/comm`
echo "进程名称: $mem_pro"
mem_command=`ls /proc/$mem_pid/cmdline`
echo "启动命令是: $mem_command"
lsof -p $mem_pid > /lhf/tmp/file2.txt
mem_file_num=`wc -l /lhf/tmp/file2.txt |awk '{print $1}'`
echo "占用描述符数: $mem_file_num"
mem_port=`netstat -lntp |grep $mem_pro |awk '{print $4}' |awk -F':' '{print $NF}'`
echo "端口:$mem_port"
mem_pro_dir=`ls -l /proc/$mem_pid/cwd |awk '{print $NF}'`
echo "进程启动目录:$mem_pro_dir"
(adsbygoogle = window.adsbygoogle || []).push({});