查看根目录内容

[root@xxxx /]# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

proc简介

Linux 内核提供了一种进程信息虚拟文件系统(Process information virtual file system) ,简称 proc,通过 proc 这个虚拟的文件系统,可以在运行时访问内核(core)内部数据结构、改变内核的某些参数设置。
数据都是在内存里,本身不占任何硬盘空间。如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的

[root@xxxx proc]# ls
1 106340 118 119744 134 2 2781 2880 2993 3142 3210 3635 42514 52116 64 74 82 91 99 driver key-users net sysrq-trigger
10 106413 118327 12 14 21 2785 2881 3 3160 3248 37 43 53 66 76 83 92 acpi execdomains kmsg pagetypeinfo sysvipc
102475 106502 118831 120 16 22 28 2882 3091 3182 3252 3755 43208 53036 67 77 84 92677 buddyinfo fb kpagecount partitions timer_list
103184 106563 119 120640 167 23 2823 2883 31 3184 3256 38 44 54 68 78 86 93 bus filesystems kpageflags sched_debug timer_stats
103553 107 119112 121 17 24 2826 2884 3100 3185 33 39 46 56 69 78374 88 9352 cgroups fs loadavg schedstat tty
104063 107133 119208 121372 18 2565 2839 2885 3135 3188 34 3920 47 57 69466 78676 88717 93840 cmdline interrupts locks scsi uptime
104215 108 119213 123690 1878 2567 2840 2886 3136 3195 3446 3993 48 58 7 78687 88870 94 consoles iomem mdstat self version
104515 11 119215 123691 19 2568 2859 2887 3137 3196 3450 4038 49 59 71 78688 89 95 cpuinfo ioports meminfo slabinfo vmallocinfo
104970 110742 119240 124607 1902 2582 2864 29 3138 3198 3451 41 5 61 71792 78790 8923 96 crypto irq misc softirqs vmstat
105 113867 119333 128906 1907 26 2867 2956 3139 32 36 42 5027 61403 72 79 9 97 devices kallsyms modules stat zoneinfo
105657 113868 119602 13 1915 26305 2878 2969 3140 3202 3629 4237 51 62 73 8 90 973 diskstats kcore mounts swaps
106 116 119707 13027 1940 27 2879 2992 3141 3205 3630 42503 52 63 73040 81 90034 98 dma keys mtrr sys

另外,在​​/proc​​下还有三个很重要的目录:net,scsi和sys。 sys目录是可写的,可以通过它来访问或修改内核的参数,而net和scsi则依赖于内核配置。例如,如果系统不支持scsi,则scsi 目录不存在。

进程目录

​/proc​​ 下有一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的 PID号为目录名,它们是读取进程信息的接口。而self目录则是读取进程本身的信息接口,是一个link。

#以进程 4327为例
[root@xxxx 4237]# ls
ls: cannot read symbolic link exe: No such file or directory
total 0
dr-xr-xr-x 2 root root 0 Jun 29 12:56 attr
-rw-r--r-- 1 root root 0 Jun 29 12:56 autogroup
-r-------- 1 root root 0 Jun 29 12:56 auxv
-r--r--r-- 1 root root 0 Jun 29 12:56 cgroup
--w------- 1 root root 0 Jun 29 12:56 clear_refs
-r--r--r-- 1 root root 0 Jun 29 12:56 cmdline #cmdline,进程启动命令
-rw-r--r-- 1 root root 0 Jun 29 12:56 comm
-rw-r--r-- 1 root root 0 Jun 29 12:56 coredump_filter
-r--r--r-- 1 root root 0 Jun 29 12:56 cpuset
lrwxrwxrwx 1 root root 0 Jun 29 12:56 cwd -> /
-r-------- 1 root root 0 Jun 24 16:35 environ
lrwxrwxrwx 1 root root 0 Jun 24 16:35 exe #exe,指向启动当前进程的可执行文件(完整路径)的符号链接
dr-x------ 2 root root 0 Jun 24 19:40 fd #fd,进程相关的所有的文件描述符
dr-x------ 2 root root 0 Jun 29 12:56 fdinfo
-rw-r--r-- 1 root root 0 Jun 29 12:56 gid_map
-r-------- 1 root root 0 Jun 29 12:56 io
-r--r--r-- 1 root root 0 Jun 29 12:56 limits
-rw-r--r-- 1 root root 0 Jun 29 12:56 loginuid
dr-x------ 2 root root 0 Jun 29 12:56 map_files
-r--r--r-- 1 root root 0 Jun 29 12:56 maps
-rw------- 1 root root 0 Jun 29 12:56 mem
-r--r--r-- 1 root root 0 Jun 29 12:56 mountinfo
-r--r--r-- 1 root root 0 Jun 29 12:56 mounts
-r-------- 1 root root 0 Jun 29 12:56 mountstats
dr-xr-xr-x 5 root root 0 Jun 29 12:56 net
dr-x--x--x 2 root root 0 Jun 29 12:56 ns
-r--r--r-- 1 root root 0 Jun 29 12:56 numa_maps
-rw-r--r-- 1 root root 0 Jun 29 12:56 oom_adj
-r--r--r-- 1 root root 0 Jun 29 12:56 oom_score
-rw-r--r-- 1 root root 0 Jun 29 12:56 oom_score_adj
-r--r--r-- 1 root root 0 Jun 29 12:56 pagemap
-r-------- 1 root root 0 Jun 29 12:56 patch_state
-r--r--r-- 1 root root 0 Jun 29 12:56 personality
-rw-r--r-- 1 root root 0 Jun 29 12:56 projid_map
lrwxrwxrwx 1 root root 0 Jun 29 12:56 root -> /
-rw-r--r-- 1 root root 0 Jun 29 12:56 sched
-r--r--r-- 1 root root 0 Jun 29 12:56 schedstat
-r--r--r-- 1 root root 0 Jun 29 12:56 sessionid
-rw-r--r-- 1 root root 0 Jun 29 12:56 setgroups
-r--r--r-- 1 root root 0 Jun 29 12:56 smaps
-r--r--r-- 1 root root 0 Jun 29 12:56 stack
-r--r--r-- 1 root root 0 Jun 28 10:30 stat
-r--r--r-- 1 root root 0 Jun 24 16:35 statm
-r--r--r-- 1 root root 0 Jun 29 12:56 status #status,进程状态信息
-r--r--r-- 1 root root 0 Jun 29 12:56 syscall
dr-xr-xr-x 3 root root 0 Jun 29 12:56 task #task,包含由当前进程所运行的每一个线程的相关信息,每个线程的相关信息文件均保存在一个由线程号(tid)命名的目录中
-r--r--r-- 1 root root 0 Jun 29 12:56 timers
-rw-r--r-- 1 root root 0 Jun 29 12:56 uid_map
-r--r--r-- 1 root root 0 Jun 29 12:56 wchan

查看某个进程状态

[root@xxxx 4237]# cat status
Name: kworker/4:1H
Umask: 0000
State: S (sleeping)
Tgid: 4237
Ngid: 0
Pid: 4237 #进程id
PPid: 2 #父进程id
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 64
Groups:
Threads: 1
SigQ: 2/127880
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: ffffffffffffffff
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: 0000001fffffffff
CapEff: 0000001fffffffff
CapBnd: 0000001fffffffff
CapAmb: 0000000000000000
Seccomp: 0
Speculation_Store_Bypass: thread vulnerable
Cpus_allowed: 00000000,00000000,00000000,00000010
Cpus_allowed_list: 4
Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list: 0
voluntary_ctxt_switches: 3521966
nonvoluntary_ctxt_switches: 5

僵尸进程问题

某些情况下,我们需要杀java进程,下面使用强制杀死进程的方式

[root@xxxx usr]# kill -9  4327

执行上面的命令发现没有任何效果,使用 ​​jps​​ 查看, 进程还是存在

[root@xxxx usr]# jps -l

此时便可以通过杀父进程的方式解决

[root@xxxx usr]# cat /proc/4327/status

也就是上图中的PPid

[root@xxxx usr]# kill -9  2