场景:现在知道一个应用的对应端口号11001,我们想要知道该端口号进程启动的信息(启动命令,启动时间,应用当前状态,CPU使用情况等等)
- 用如下命令获取端口占用状态
$ netstat -anp|grep 11001
tcp 0 0 :::11001 :::* LISTEN 19983/./livestream
其中19983/./livestream
就是端口占用的进程和应用名。
2. 然后依据进程号查进程信息
$ ps -ef|grep 19983
root 19983 1 0 2017 ? 00:21:11 ./livestream -c application.conf -log_dir ./logs/
root 186277 174428 0 11:15 pts/1 00:00:00 grep 19983
通过-ef
选项得到的只有所属用户、进程pid、父进程pid、进程级别、启动时间、启动进程的终端名、进程占用CPU的时间、进程启动命令。
也可以通过如下命令查看自定义内容:
$ ps -eo pid,ppid,lstart,time,stat,nice,cmd|grep 19983
19983 1 Fri Sep 29 10:36:05 2017 00:21:11 Sl 0 ./livestream -c application.conf -log_dir ./logs/
但是以上结果中,虽然能够查看到启动命令,但是具体这个进程对应的应用启动的脚本在哪里的绝对路径无法获知!!对此我们需要查看/proc/下的该进程的详细信息!!
3. 查看/porc/pid下进程的详细信息
$ cd /proc/19983
$ ls -lrt
total 0
-r--r--r-- 1 root root 0 Jun 4 10:53 status
-r--r--r-- 1 root root 0 Jun 4 10:53 cmdline
-r--r--r-- 1 root root 0 Jun 4 10:54 wchan
dr-xr-xr-x 54 root root 0 Jun 4 10:54 task
-r--r--r-- 1 root root 0 Jun 4 10:54 syscall
-r--r--r-- 1 root root 0 Jun 4 10:54 statm
-r--r--r-- 1 root root 0 Jun 4 10:54 stat
-r--r--r-- 1 root root 0 Jun 4 10:54 stack
-r--r--r-- 1 root root 0 Jun 4 10:54 smaps
-r--r--r-- 1 root root 0 Jun 4 10:54 sessionid
-r--r--r-- 1 root root 0 Jun 4 10:54 schedstat
-rw-r--r-- 1 root root 0 Jun 4 10:54 sched
lrwxrwxrwx 1 root root 0 Jun 4 10:54 root -> /
-r--r--r-- 1 root root 0 Jun 4 10:54 personality
-r--r--r-- 1 root root 0 Jun 4 10:54 pagemap
-rw-r--r-- 1 root root 0 Jun 4 10:54 oom_score_adj
-r--r--r-- 1 root root 0 Jun 4 10:54 oom_score
-rw-r--r-- 1 root root 0 Jun 4 10:54 oom_adj
-r--r--r-- 1 root root 0 Jun 4 10:54 numa_maps
dr-x--x--x 2 root root 0 Jun 4 10:54 ns
dr-xr-xr-x 7 root root 0 Jun 4 10:54 net
-r-------- 1 root root 0 Jun 4 10:54 mountstats
-r--r--r-- 1 root root 0 Jun 4 10:54 mounts
-r--r--r-- 1 root root 0 Jun 4 10:54 mountinfo
-rw------- 1 root root 0 Jun 4 10:54 mem
-r--r--r-- 1 root root 0 Jun 4 10:54 maps
-rw-r--r-- 1 root root 0 Jun 4 10:54 loginuid
-rw------- 1 root root 0 Jun 4 10:54 limits
-r-------- 1 root root 0 Jun 4 10:54 io
dr-x------ 2 root root 0 Jun 4 10:54 fdinfo
dr-x------ 2 root root 0 Jun 4 10:54 fd
lrwxrwxrwx 1 root root 0 Jun 4 10:54 exe -> /xxx/xxx/xxx/xxxx/livestream
-r-------- 1 root root 0 Jun 4 10:54 environ
lrwxrwxrwx 1 root root 0 Jun 4 10:54 cwd -> /xxx/xxx/xxx/xxxx
-r--r--r-- 1 root root 0 Jun 4 10:54 cpuset
-rw-r--r-- 1 root root 0 Jun 4 10:54 coredump_filter
-rw-r--r-- 1 root root 0 Jun 4 10:54 comm
--w------- 1 root root 0 Jun 4 10:54 clear_refs
-r--r--r-- 1 root root 0 Jun 4 10:54 cgroup
-r-------- 1 root root 0 Jun 4 10:54 auxv
-rw-r--r-- 1 root root 0 Jun 4 10:54 autogroup
dr-xr-xr-x 2 root root 0 Jun 4 10:54 attr
status:记录了进程的详细状态信息,如进程应用名、进程线程数、进程状态等等。
cmdline:记录的记时ps -eo 中的cmd参数对应输出的相对路径下的进程启动执行命令。
task: 这是一个目录,里面有若干子目录,记录的是这个进程对应的线程信息,具体如下:
$ cd task/
$ ls
130783 19983 19986 20008 21012 21015 22963 27035 29023 32416 35691 38779 4494 51338 55752 62816 78834 97445
142480 19984 19987 21006 21013 22961 23950 27036 29024 34264 37120 41864 46833 51851 57351 64859 80842
177430 19985 19996 21011 21014 22962 23951 28953 32415 34265 37121 43712 48682 53947 61799 78003 91941
以上task下的每一个文件夹中记录的都是每个线程的信息,文件名就是线程的ID,进入其中就可以查看该进程启动的线程的详细信息:
$ cd 34265
$ ls -lrt
total 0
-r--r--r-- 1 root root 0 Jun 12 15:51 wchan
-r--r--r-- 1 root root 0 Jun 12 15:51 syscall
-r--r--r-- 1 root root 0 Jun 12 15:51 status
-r--r--r-- 1 root root 0 Jun 12 15:51 statm
-r--r--r-- 1 root root 0 Jun 12 15:51 stat
-r--r--r-- 1 root root 0 Jun 12 15:51 stack
-r--r--r-- 1 root root 0 Jun 12 15:51 smaps
-r--r--r-- 1 root root 0 Jun 12 15:51 sessionid
-r--r--r-- 1 root root 0 Jun 12 15:51 schedstat
-rw-r--r-- 1 root root 0 Jun 12 15:51 sched
lrwxrwxrwx 1 root root 0 Jun 12 15:51 root -> /
-r--r--r-- 1 root root 0 Jun 12 15:51 personality
-r--r--r-- 1 root root 0 Jun 12 15:51 pagemap
-rw-r--r-- 1 root root 0 Jun 12 15:51 oom_score_adj
-r--r--r-- 1 root root 0 Jun 12 15:51 oom_score
-rw-r--r-- 1 root root 0 Jun 12 15:51 oom_adj
-r--r--r-- 1 root root 0 Jun 12 15:51 numa_maps
dr-x--x--x 2 root root 0 Jun 12 15:51 ns
-r--r--r-- 1 root root 0 Jun 12 15:51 mounts
-r--r--r-- 1 root root 0 Jun 12 15:51 mountinfo
-rw------- 1 root root 0 Jun 12 15:51 mem
-r--r--r-- 1 root root 0 Jun 12 15:51 maps
-rw-r--r-- 1 root root 0 Jun 12 15:51 loginuid
-rw------- 1 root root 0 Jun 12 15:51 limits
-r-------- 1 root root 0 Jun 12 15:51 io
dr-x------ 2 root root 0 Jun 12 15:51 fdinfo
dr-x------ 2 root root 0 Jun 12 15:51 fd
lrwxrwxrwx 1 root root 0 Jun 12 15:51 exe -> /xxx/xxx/xxx/xxx/livestream
-r-------- 1 root root 0 Jun 12 15:51 environ
lrwxrwxrwx 1 root root 0 Jun 12 15:51 cwd -> /xxx/xxx/xxxx
-r--r--r-- 1 root root 0 Jun 12 15:51 cpuset
-rw-r--r-- 1 root root 0 Jun 12 15:51 comm
-r--r--r-- 1 root root 0 Jun 12 15:51 cmdline
--w------- 1 root root 0 Jun 12 15:51 clear_refs
-r--r--r-- 1 root root 0 Jun 12 15:51 cgroup
-r-------- 1 root root 0 Jun 12 15:51 auxv
dr-xr-xr-x 2 root root 0 Jun 12 15:51 attr
到此,关于进程的线程信息已经可以获取到,由于篇幅限制在此暂时不对这里的线程信息进行解释,有兴趣的可以关注后期内容或者自行百度。接着上述解释进程目录/proc/pid下task之后的目录内容。
statm:进程从起点开始的内存使用状况记录
stat:包含了从进程启动开始后进程所有CPU活跃的信息
root -> /:链接到进程的根目录为/
exe -> /xxx/xxx/xxx/xxx/livestream:显示的就是当前进程启动程序的绝对路径
其它文件的详细信息解析参考:https://blog.youkuaiyun.com/enweitech/article/details/53391567
至此,我们就完成了通过端口->获取进程号->获取进程信息的任务。