proc文件系统下各参数解析
文章目录
- 一、proc文件系统
- 1.1 /proc/[pid]
- 1.1.1 /proc/[pid]/arch_status
- 1.1.2 /proc/[pid]/attr
- 1.1.2.1 /proc/[pid]/attr/current
- 1.1.2.2 /proc/[pid]/attr/exec
- 1.1.2.3 /proc/[pid]/attr/fscreate
- 1.1.2.4 /proc/[pid]/attr/keycreate
- 1.1.2.5 /proc/[pid]/attr/prev
- 1.1.2.6 /proc/[pid]/attr/sockcreate
- 1.1.3 /proc/[pid]/autogroup
- 1.1.4 /proc/[pid]/auxv
- 1.1.5 /proc/[pid]/cgroup
- 1.1.6 /proc/[pid]/clear_refs
- 1.1.7 /proc/[pid]/cmdline
- 1.1.8 /proc/[pid]/comm
- 1.1.9 /proc/[pid]/coredump_filter
- 1.1.10 /proc/[pid]/cpu_resctrl_groups
- 1.1.11 /proc/[pid]/cpuset
- 1.1.12 /proc/[pid]/cwd -> /
- 1.1.13 /proc/[pid]/environ
- 1.1.14 /proc/[pid]/exe
- 1.1.15 /proc/[pid]/fd
- 1.1.16 /proc/[pid]/fdinfo
- 1.1.17 /proc/[pid]/gid_map
- 1.1.18 /proc/[pid]/io
- 1.1.19 /proc/[pid]/limits
- 1.1.20 /proc/[pid]/loginuid
- 1.1.21 /proc/[pid]/map_files
- 1.1.22 /proc/[pid]/maps
- 1.1.23 /proc/[pid]/mem
- 1.1.24 /proc/[pid]/mountinfo
- 1.1.25 /proc/[pid]/mounts
- 1.1.26 /proc/[pid]/mountstats
- 1.1.27 /proc/[pid]/net
- 1.1.28 /proc/[pid]/ns
- 1.1.29 /proc/[pid]/numa_maps
- 1.1.30 /proc/[pid]/oom_adj
- 1.1.31 /proc/[pid]/oom_score
- 1.1.32 /proc/[pid]/oom_score_adj
- 1.1.33 /proc/[pid]/pagemap
- 1.1.34 /proc/[pid]/patch_state
- 1.1.35 /proc/[pid]/personality
- 1.1.36 /proc/[pid]/projid_map
- 1.1.37 /proc/[pid]/root
- 1.1.38 /proc/[pid]/sched
- 1.1.39 /proc/[pid]/schedstat
- 1.1.40 /proc/[pid]/sessionid
- 1.1.41 /proc/[pid]/setgroups
- 1.1.42 /proc/[pid]/smaps
- 1.1.43 /proc/[pid]/smaps_rollup
- 1.1.44 /proc/[pid]/stack
- 1.1.45 /proc/[pid]/stat
- 1.1.46 /proc/[pid]/statm
- 1.1.47 /proc/[pid]/status
- 1.1.48 /proc/[pid]/syscall
- 1.1.49 /proc/[pid]/task
- 1.1.50 /proc/[pid]/timens_offsets
- 1.1.51 /proc/[pid]/timers
- 1.1.52 /proc/[pid]/timerslack_ns
- 1.1.53 /proc/[pid]/uid_map
- 1.1.54 /proc/[pid]/wchan
- 1.2 acpi/
- 1.3 asound/
- 1.4 bootconfig
- 1.5 buddyinfo
- 1.6 bus/
- 1.7 cgroups
- 1.8 cmdline
- 1.9 consoles
- 1.10 cpuinfo
- 1.11 crypto
- 1.12 devices
- 1.13 diskstats
- 1.14 dma
- 1.15 driver/
- 1.16 dynamic_debug/
- 1.17 execdomains
- 1.18 fb
- 1.19 filesystems
- 1.20 fs/
- 1.21 interrupts
- 1.22 iomem
- 1.23 ioports
- 1.24 irq/
- 1.25 kallsyms
- 1.26 kcore
- 1.27 keys
- 1.28 key-users
- 1.29 kmsg
- 1.30 kpagecgroup
- 1.31 kpagecount
- 1.32 kpageflags
- 1.33 loadavg
- 1.34 locks
- 1.35 mdstat
- 1.36 meminfo
- 1.37 misc
- 1.38 modules
- 1.39 mounts
- 1.40 mpt/
- 1.41 mtrr
- 1.42 net -> self/net/
- 1.43 pagetypeinfo
- 1.44 partitions
- 1.45 pressure/
- 1.46 schedstat
- 1.47 scsi/
- 1.48 self
- 1.49 slabinfo
- 1.50 softirqs
- 1.51 stat
- 1.52 swaps
- 1.53 sys/
- 1.54 sysrq-trigger
- 1.55 sysvipc/
- 1.56 thread-self
- 1.57 timer_list
- 1.58 tty/
- 1.59 uptime
- 1.60 version
- 1.61 version_signature
- 1.62 vmallocinfo
- 1.63 vmstat
- 1.64 zoneinfo
一、proc文件系统
proc全称是process information pseudo-filesystem,翻译过来就是进程信息伪文件系统。
proc文件系统是一个伪文件系统,它提供了一个到内核数据结构的接口,一般挂载在/proc。proc文件系统中的大多数文件都是只读的,但有些文件是可写的,允许修改内核变量。
在Ubuntu20.04,内核版本是5.15.0-56。我们可以看到proc文件系统下的文件和目录如下图所示:
我们首先看到的是很多的数字,这些数字就是我们系统的每一个进程的信息,数字目录下面的文件的含义是一样的。我们就把这些数字归类为pid。
每个/proc/[pid]目录中的文件通常属于进程的有效用户和有效组ID。但是,作为一种安全措施,如果进程的“dumpable”属性为,则所有权将设置为root:root
请设置为1以外的值。
1.1 /proc/[pid]
每个正在运行的进程都有一个数值子目录;子目录以进程ID命名。每个/proc/[pid]子目录都包含下面描述的伪文件和目录:
1.1.1 /proc/[pid]/arch_status
空文件
1.1.2 /proc/[pid]/attr
此目录中的文件为安全模块提供了API。这个目录的内容是可以被读取和写入的文件,以便设置与安全相关的属性。添加这个目录是为了支持SELinux,但目的是让API足够通用,以支持其他安全模块。只有在内核配置了CONFIG_SECURITY时,才会出现这个目录。
1.1.2.1 /proc/[pid]/attr/current
该文件的内容表示进程的当前安全属性。在SELinux中,这个文件用于获取进程的安全上下文。安全模块可以选择通过写入该节点来支持“设置”操作。
1.1.2.2 /proc/[pid]/attr/exec
该文件表示在执行execve时分配给进程的属性。
在SELinux中,这是支持角色/域转换所需要的,而execve是进行这种转换的首选点,因为它在新的安全标签中提供了对流程初始化和状态继承的更好控制。在SELinux中,这个属性在execve上被重置,以便新程序对它可能进行的任何execve调用都恢复到默认行为。在SELinux中,进程只能设置自己的/proc/[pid]/attr/exec属性。
1.1.2.3 /proc/[pid]/attr/fscreate
该文件表示要分配给后续调用open(2)、mkdir(2)、symlink(2)和mknod(2)所创建的文件的属性。
SELinux使用这个文件来支持在安全状态下创建文件(使用前面提到的系统调用),这样在创建和设置属性之间就不会有不适当访问的风险。在SELinux中,该属性在execve上被重置,以便新程序对它可能进行的任何文件创建调用恢复默认行为,但该属性将在程序内的多个文件创建调用中保持,除非显式重置。在SELinux中,进程只能设置自己的/proc/[pid]/attr/fscreate属性。
1.1.2.4 /proc/[pid]/attr/keycreate
如果进程将安全上下文写入该文件,则随后创建的所有密钥(add_key(2))都将使用该上下文进行标记。
1.1.2.5 /proc/[pid]/attr/prev
该文件包含最后一次执行(2)之前进程的安全上下文;即/proc/[pid]/attr/current的上一个值。
1.1.2.6 /proc/[pid]/attr/sockcreate
如果进程将安全上下文写入此文件,则随后创建的所有套接字都将使用此上下文进行标记。
1.1.3 /proc/[pid]/autogroup
root@ubuntu:/proc/1# cat /proc/1/autogroup
/autogroup-2 nice 0
内核提供了一种被称为autogrouping的特性来为多进程和CPU密集型负载(如Linux内核中的大量并行进程)提升交互式桌面性能。当通过setsid(2) (setsid会将一个进程脱离父进程)创建一个新的会话时会创建一个新的autogroup,这种情况可能发生在一个新的终端窗口启动时。使用fork(2)创建的进程会继承父辈的autogroup成员。因此,一个会话中的所有进程都属于同一个autogroup。当最后一个进程结束后,autogroup会被自动销毁。一个autogroup中的所有成员都属于同一个内核调度器"任务组"。CFS调度器使用了在任务组间均衡分配CPU时钟周期的算法。可以使用下面例子进行展示提升交互式桌面性能的好处。autogroup的nice值的意义与进程的nice值意义相同,区别是前者为将autogroup作为一个整体,并基于相对其他autogroups设置的nice值来分配CPU时钟周期。对于一个autogroup内的进程,其CPU时钟周期为autogroup(相对于其他autogroups)的nice值和进程的nice值(相对于其他进程)的产物(即首先根据autogroup的nice值计算该autogroup所占用的CPU,然后根据进程的nice值计算该进程所占用的(属于其autogroup的)CPU)。
这里可以查看进程所属的autogroup和该autogroup的nioce值。
1.1.4 /proc/[pid]/auxv
root@ubuntu:/proc/1# hexdump auxv
0000000 0021 0000 0000 0000 6000 efd4 7ffe 0000
0000010 0033 0000 0000 0000 06f0 0000 0000 0000
0000020 0010 0000 0000 0000 fbff 0f8b 0000 0000
0000030 0006 0000 0000 0000 1000 0000 0000 0000
0000040 0011 0000 0000 0000 0064 0000 0000 0000
0000050 0003 0000 0000 0000 8040 cd96 563b 0000
0000060 0004 0000 0000 0000 0038 0000 0000 0000
0000070 0005 0000 0000 0000 000d 0000 0000 0000
0000080 0007 0000 0000 0000 c000 fd72 7fe5 0000
0000090 0008 0000 0000 0000 0000 0000 0000 0000
00000a0 0009 0000 0000 0000 5a50 cd9a 563b 0000
00000b0 000b 0000 0000 0000 0000 0000 0000 0000
00000c0 000c 0000 0000 0000 0000 0000 0000 0000
00000d0 000d 0000 0000 0000 0000 0000 0000 0000
00000e0 000e 0000 0000 0000 0000 0000 0000 0000
00000f0 0017 0000 0000 0000 0000 0000 0000 0000
0000100 0019 0000 0000 0000 7859 efd0 7ffe 0000
0000110 001a 0000 0000 0000 0002 0000 0000 0000
0000120 001f 0000 0000 0000 7fed efd0 7ffe 0000
0000130 000f 0000 0000 0000 7869 efd0 7ffe 0000
0000140 0000 0000 0000 0000 0000 0000 0000 0000
0000150
这个文件包含了在进程执行时,传递给进程的ELF的解释器的信息。这个文件的格式是一个无符号的long类型的ID加上每个entry的一个无符号的long类型,这最后的一个entry包含了两个零。
1.1.5 /proc/[pid]/cgroup
root@ubuntu:/proc/1# cat cgroup
13:pids:/init.scope
12:rdma:/
11:net_cls,net_prio:/
10:memory:/init.scope
9:freezer:/
8:perf_event:/
7:misc:/
6:hugetlb:/
5:cpu,cpuacct:/
4:devices:/init.scope
3:blkio:/
2:cpuset:/
1:name=systemd:/init.scope
0::/init.scope
可以获取一个进程属于哪些控制组的信息。
1.1.6 /proc/[pid]/clear_refs
这是一个只能写的文件,只能由进程的所有者写。写入的值和含义如下表所示:
值 | 含义 |
---|---|
1 | 重置与进程相关的所有页的PG_Referenced和access /YOUNG位。 |
2 | 重置与进程关联的所有匿名页的PG_Referenced和access /YOUNG位。 |
3 | 重置与进程关联的所有文件映射页的PG_Referenced和accessible /YOUNG位。 |
4 | 清除与该进程关联的所有页面的软脏位。 |
5 | 将峰值驻留集大小(“高水位标记”)重置为进程当前驻留集大小值。 |
6 | 无效 |
1.1.7 /proc/[pid]/cmdline
root@ubuntu:/proc/1# cat cmdline
/sbin/initautonoprompt
root@ubuntu:/proc/1#
这个只读文件保存进程的完整命令行,除非进程是僵尸进程。在后一种情况下,这个文件中什么都没有,也就是说,对这个文件的读取将返回0个字符。命令行参数在这个文件中显示为一组由空字节(‘\0’)分隔的字符串,最后一个字符串后面还有一个空字节。
1.1.8 /proc/[pid]/comm
root@ubuntu:/proc/1# cat comm
systemd
该文件公开进程的comm值,即与进程关联的命令名。同一个进程中的不同线程可能有不同的comm值,可以通过/proc/[pid]/task/[tid]/comm访问。一个线程可以修改它的comm值,或者同一线程组中的任何其他线程的comm值,通过写入文件/proc/self/task/[tid]/comm。长度超过一定长度的字符的字符串将被静默截断。
1.1.9 /proc/[pid]/coredump_filter
root@ubuntu:/proc/1# cat coredump_filter
00000033
1.1.10 /proc/[pid]/cpu_resctrl_groups
root@ubuntu:/proc/1# cat cpu_resctrl_groups
res:
mon:
1.1.11 /proc/[pid]/cpuset
root@ubuntu:/proc/1# cat cpuset
/
1.1.12 /proc/[pid]/cwd -> /
这是到进程当前工作目录的符号链接,也就是执行命令的时候所在的目录。在多线程进程中,如果主线程已经终止(通常通过调用pthread_exit(3)),则此符号链接的内容将不可用。
1.1.13 /proc/[pid]/environ
root@ubuntu:/proc/1# cat environ | tr '\000' '\n'
find_preseed=/preseed.cfg
HOME=/
init=/sbin/init
NETWORK_SKIP_ENSLAVED=
locale=en_US
TERM=linux
BOOT_IMAGE=/boot/vmlinuz-5.15.0-56-generic
drop_caps=
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
rootmnt=/root
priority=critical
该文件包含当前正在执行的程序通过execve(2)启动时设置的初始环境。条目由空字节(‘\0’)分隔,并且在末尾可能有一个空字节。如果在执行execve(2)之后,进程修改了它的环境(例如,通过调用putenv(3)这样的函数或直接修改environ(7)变量),该文件将不会反映这些更改。
1.1.14 /proc/[pid]/exe
root@ubuntu:/proc/1# ll exe
lrwxrwxrwx 1 root root 0 Jan 14 05:17 exe -> /usr/lib/systemd/systemd*
该文件是一个符号链接,指向执行的程序文件,包含所执行命令的实际路径名。
1.1.15 /proc/[pid]/fd
root@ubuntu:/proc/1# ls fd
0 14 190 200 206 211 217 223 229 234 240 277 30 308 314 32 326 331 34 42 48 53 59 64 7 78
1 15 191 201 207 212 218 224 23 235 241 28 302 309 315 321 327 332 35 43 49 54 6 65 73 79
10 16 192 202 208 213 219 225 230 236 242 29 303 31 316 322 328 334 36 44 5 55 60 66 74 8
11 17 199 203 209 214 22 226 231 238 25 292 304 310 317 323 329 335 4 45 50 56 61 67 75 9
12 18 2 204 21 215 220 227 232 239 26 299 306 311 318 324 33 336 40 46 51 57 62 68 76
13 19 20 205 210 216 221 228 233 24 27 3 307 313 319 325 330 337 41 47 52 58 63 69 77
root@ubuntu:/proc/1#
这是一个子目录,包含进程打开的每个文件的一个条目,由其文件描述符命名,是到实际文件的符号链接。
root@ubuntu:/proc/1/fd# ll
total 0
dr-x------ 2 root root 0 Jan 14 05:17 ./
dr-xr-xr-x 9 root root 0 Jan 14 05:17 ../
lrwx------ 1 root root 64 Jan 14 05:17 0 -> /dev/null
lrwx------ 1 root root 64 Jan 14 05:17 1 -> /dev/null
lr-x------ 1 root root 64 Jan 14 05:19 10 -> /proc/1/mountinfo
lr-x------ 1 root root 64 Jan 14 05:19 11 -> anon_inode:inotify
lr-x------ 1 root root 64 Jan 14 05:17 12 -> anon_inode:inotify
lr-x------ 1 root root 64 Jan 14 05:19 13 -> anon_inode:inotify
lr-x------ 1 root root 64 Jan 14 05:19 14 -> /proc/swaps
lrwx------ 1 root root 64 Jan 14 05:19 15 -> 'socket:[25142]'
lr-x------ 1 root root 64 Jan 14 05:19 16 -> anon_inode:inotify
lr-x------ 1 root root 64 Jan 14 05:19 17 -> anon_inode:inotify
lrwx------ 1 root root 64 Jan 14 05:19 18 -> 'socket:[58239]'
lrwx------ 1 root root 64 Jan 14 05:19 19 -> 'socket:[25146]'
lrwx------ 1 root root 64 Jan 14 05:19 190 -> 'socket:[25143]'
lrwx------ 1 root root 64 Jan 14 05:19 191 -> 'socket:[25144]'
lrwx------ 1 root root 64 Jan 14 05:19 192 -> 'socket:[25145]'
lrwx------ 1 root root 64 Jan 14 05:19 199 -> 'socket:[42574]'
lrwx------ 1 root root 64 Jan 14 05:17 2 -> /dev/null
lrwx------ 1 root root 64 Jan 14 05:17 20 -> 'socket:[25148]'
lrwx------ 1 root root 64 Jan 14 05:19 200 -> 'socket:[42575]'
lrwx------ 1 root root 64 Jan 14 05:19 201 -> 'socket:[25173]'
lr-x------ 1 root root 64 Jan 14 05:19 202 -> 'pipe:[25155]'
lrwx------ 1 root root 64 Jan 14 05:19 203 -> 'socket:[34670]'
lrwx------ 1 root root 64 Jan 14 05:19 204 -> 'socket:[34662]'
lrwx------ 1 root root 64 Jan 14 05:19 205 -> 'socket:[34660]'
lrwx------ 1 root root 64 Jan 14 05:19 206 -> 'socket:[25169]'
lrwx------ 1 root root 64 Jan 14 05:19 207 -> 'socket:[25171]'
lrwx------ 1 root root 64 Jan 14 05:19 208 -> /run/initctl|
lrwx------ 1 root root 64 Jan 14 05:19 209 -> 'socket:[25167]'
lrwx------ 1 root root 64 Jan 14 05:19 21 -> 'socket:[50747]'
lrwx------ 1 root root 64 Jan 14 05:19 210 -> 'socket:[34666]'
lrwx------ 1 root root 64 Jan 14 05:19 211 -> 'socket:[34668]'
lrwx------ 1 root root 64 Jan 14 05:19 212 -> 'socket:[25159]'
lrwx------ 1 root root 64 Jan 14 05:19 213 -> 'socket:[34664]'
lrwx------ 1 root root 64 Jan 14 05:19 214 -> 'socket:[25166]'
lrwx------ 1 root root 64 Jan 14 05:19 215 -> 'socket:[52770]'
lrwx------ 1 root root 64 Jan 14 05:19 216 -> 'socket:[52769]'
lrwx------ 1 root root 64 Jan 14 05:19 217 -> 'socket:[52689]'
lrwx------ 1 root root 64 Jan 14 05:19 218 -> 'socket:[52578]'
lrwx------ 1 root root 64 Jan 14 05:19 219 -> 'socket:[52485]'
lrwx------ 1 root root 64 Jan 14 05:19 22 -> 'socket:[58263]'
lrwx------ 1 root root 64 Jan 14 05:19 220 -> 'socket:[52472]'
lrwx------ 1 root root 64 Jan 14 05:19 221 -> 'socket:[52451]'
lrwx------ 1 root root 64 Jan 14 05:19 223 -> 'socket:[51377]'
lrwx------ 1 root root 64 Jan 14 05:19 224 -> 'socket:[51376]'
lrwx------ 1 root root 64 Jan 14 05:19 225 -> 'socket:[51368]'
lrwx------ 1 root root 64 Jan 14 05:19 226 -> 'socket:[51367]'
lrwx------ 1 root root 64 Jan 14 05:19 227 -> 'socket:[51366]'
lrwx------ 1 root root 64 Jan 14 05:19 228 -> 'socket:[51365]'
lrwx------ 1 root root 64 Jan 14 05:19 229 -> 'socket:[51364]'
lrwx------ 1 root root 64 Jan 14 05:19 23 -> 'socket:[50752]'
lrwx------ 1 root root 64 Jan 14 05:19 230 -> 'socket:[51363]'
lrwx------ 1 root root 64 Jan 14 05:19 231 -> 'socket:[51362]'
lrwx------ 1 root root 64 Jan 14 05:19 232 -> 'socket:[51361]'
lrwx------ 1 root root 64 Jan 14 05:19 233 -> 'socket:[51360]'
lrwx------ 1 root root 64 Jan 14 05:19 234 -> 'socket:[51359]'
lrwx------ 1 root root 64 Jan 14 05:19 235 -> 'socket:[51358]'
lrwx------ 1 root root 64 Jan 14 05:19 236 -> 'socket:[51357]'
lrwx------ 1 root root 64 Jan 14 05:19 238 -> 'socket:[51355]'
lrwx------ 1 root root 64 Jan 14 05:19 239 -> 'socket:[47559]'
lrwx------ 1 root root 64 Jan 14 05:19 24 -> anon_inode:bpf-prog
lrwx------ 1 root root 64 Jan 14 05:19 240 -> 'socket:[46764]'
lrwx------ 1 root root 64 Jan 14 05:19 241 -> 'socket:[46763]'
lrwx------ 1 root root 64 Jan 14 05:19 242 -> 'socket:[46688]'
lrwx------ 1 root root 64 Jan 14 05:19 25 -> anon_inode:bpf-prog
lr-x------ 1 root root 64 Jan 14 05:19 26 -> /dev/autofs
lrwx------ 1 root root 64 Jan 14 05:19 27 -> anon_inode:bpf-prog
lrwx------ 1 root root 64 Jan 14 05:19 277 -> 'socket:[46107]'
lrwx------ 1 root root 64 Jan 14 05:19 28 -> 'anon_inode:[timerfd]'
lrwx------ 1 root root 64 Jan 14 05:19 29 -> anon_inode:bpf-prog
lrwx------ 1 root root 64 Jan 14 05:19 292 -> 'socket:[41161]'
lrwx------ 1 root root 64 Jan 14 05:19 299 -> 'socket:[40535]'
l-wx------ 1 root root 64 Jan 14 05:17 3 -> /dev/kmsg
lrwx------ 1 root root 64 Jan 14 05:17 30 -> anon_inode:bpf-prog
lrwx------ 1 root root 64 Jan 14 05:19 302 -> 'socket:[39802]'
lrwx------ 1 root root 64 Jan 14 05:19 303 -> 'socket:[39796]'
lrwx------ 1 root root 64 Jan 14 05:19 304 -> 'socket:[36460]'
lrwx------ 1 root root 64 Jan 14 05:19 306 -> 'socket:[36362]'
lrwx------ 1 root root 64 Jan 14 05:19 307 -> 'socket:[38990]'
lrwx------ 1 root root 64 Jan 14 05:19 308 -> 'socket:[37428]'
lrwx------ 1 root root 64 Jan 14 05:19 309 -> 'socket:[37427]'
lrwx------ 1 root root 64 Jan 14 05:17 31 -> anon_inode:bpf-prog
lrwx------ 1 root root 64 Jan 14 05:19 310 -> 'socket:[37426]'
lrwx------ 1 root root 64 Jan 14 05:19 311 -> 'socket:[37259]'
lrwx------ 1 root root 64 Jan 14 05:19 313 -> 'socket:[35883]'
lrwx------ 1 root root 64 Jan 14 05:19 314 -> 'socket:[35868]'
lrwx------ 1 root root 64 Jan 14 05:19 315 -> 'socket:[34708]'
lrwx------ 1 root root 64 Jan 14 05:19 316 -> 'socket:[34707]'
lrwx------ 1 root root 64 Jan 14 05:19 317 -> 'socket:[34705]'
lrwx------ 1 root root 64 Jan 14 05:19 318 -> 'socket:[34704]'
lrwx------ 1 root root 64 Jan 14 05:19 319 -> 'socket:[34703]'
lrwx------ 1 root root 64 Jan 14 05:19 32 -> anon_inode:bpf-prog
lrwx------ 1 root root 64 Jan 14 05:19 321 -> 'socket:[34700]'
lrwx------ 1 root root 64 Jan 14 05:19 322 -> 'socket:[34606]'
lrwx------ 1 root root 64 Jan 14 05:19 323 -> 'socket:[31292]'
lrwx------ 1 root root 64 Jan 14 05:19 324 -> 'socket:[31146]'
lrwx------ 1 root root 64 Jan 14 05:19 325 -> 'socket:[31145]'
lrwx------ 1 root root 64 Jan 14 05:19 326 -> 'socket:[29691]'
lrwx------ 1 root root 64 Jan 14 05:19 327 -> /dev/input/event2
lrwx------ 1 root root 64 Jan 14 05:19 328 -> /dev/input/event3
lrwx------ 1 root root 64 Jan 14 05:19 329 -> /dev/input/event1
lrwx------ 1 root root 64 Jan 14 05:19 33 -> anon_inode:bpf-prog
lrwx------ 1 root root 64 Jan 14 05:19 330 -> /dev/input/event4
lrwx------ 1 root root 64 Jan 14 05:19 331 -> /dev/input/event0
lrwx------ 1 root root 64 Jan 14 05:19 332 -> /dev/dri/card0
lrwx------ 1 root root 64 Jan 14 05:19 334 -> /dev/rfkill
lrwx------ 1 root root 64 Jan 14 05:19 335 -> 'socket:[34658]'
lrwx------ 1 root root 64 Jan 14 05:19 336 -> 'socket:[25175]'
lrwx------ 1 root root 64 Jan 14 05:19 337 -> 'socket:[25157]'
lrwx------ 1 root root 64 Jan 14 05:17 34 -> 'socket:[58264]'
lrwx------ 1 root root 64 Jan 14 05:17 35 -> 'socket:[72575]'
lrwx------ 1 root root 64 Jan 14 05:17 36 -> 'socket:[72576]'
lrwx------ 1 root root 64 Jan 14 05:19 4 -> 'anon_inode:[eventpoll]'
lrwx------ 1 root root 64 Jan 14 05:19 40 -> 'socket:[25202]'
lrwx------ 1 root root 64 Jan 14 05:19 41 -> 'socket:[28910]'
lrwx------ 1 root root 64 Jan 14 05:19 42 -> 'socket:[50715]'
lrwx------ 1 root root 64 Jan 14 05:19 43 -> 'socket:[50716]'
lrwx------ 1 root root 64 Jan 14 05:19 44 -> 'socket:[50717]'
lrwx------ 1 root root 64 Jan 14 05:19 45 -> 'socket:[50753]'
lrwx------ 1 root root 64 Jan 14 05:19 46 -> 'anon_inode:[timerfd]'
lrwx------ 1 root root 64 Jan 14 05:19 47 -> 'socket:[50761]'
lrwx------ 1 root root 64 Jan 14 05:19 48 -> 'socket:[50927]'
lrwx------ 1 root root 64 Jan 14 05:19 49 -> 'socket:[50778]'
lrwx------ 1 root root 64 Jan 14 05:19 5 -> 'anon_inode:[signalfd]'
lrwx------ 1 root root 64 Jan 14 05:19 50 -> 'socket:[50779]'
lrwx------ 1 root root 64 Jan 14 05:19 51 -> 'socket:[50867]'
lrwx------ 1 root root 64 Jan 14 05:19 52 -> 'socket:[50868]'
lrwx------ 1 root root 64 Jan 14 05:19 53 -> 'socket:[50869]'
lrwx------ 1 root root 64 Jan 14 05:17 54 -> 'socket:[50928]'
lrwx------ 1 root root 64 Jan 14 05:17 55 -> 'socket:[50929]'
lrwx------ 1 root root 64 Jan 14 05:17 56 -> 'socket:[50882]'
lrwx------ 1 root root 64 Jan 14 05:17 57 -> 'socket:[50932]'
lrwx------ 1 root root 64 Jan 14 05:17 58 -> 'socket:[50933]'
lrwx------ 1 root root 64 Jan 14 05:17 59 -> 'socket:[54623]'
lr-x------ 1 root root 64 Jan 14 05:19 6 -> anon_inode:inotify
lrwx------ 1 root root 64 Jan 14 05:17 60 -> 'socket:[34697]'
lrwx------ 1 root root 64 Jan 14 05:19 61 -> 'socket:[54624]'
lrwx------ 1 root root 64 Jan 14 05:19 62 -> 'socket:[54625]'
lrwx------ 1 root root 64 Jan 14 05:19 63 -> 'socket:[56790]'
lrwx------ 1 root root 64 Jan 14 05:19 64 -> 'socket:[51029]'
lrwx------ 1 root root 64 Jan 14 05:19 65 -> 'socket:[51030]'
lrwx------ 1 root root 64 Jan 14 05:19 66 -> 'socket:[51042]'
lrwx------ 1 root root 64 Jan 14 05:19 67 -> 'socket:[51043]'
lrwx------ 1 root root 64 Jan 14 05:19 68 -> 'socket:[51034]'
lrwx------ 1 root root 64 Jan 14 05:19 69 -> 'socket:[51035]'
lr-x------ 1 root root 64 Jan 14 05:19 7 -> /sys/fs/cgroup/unified/
lrwx------ 1 root root 64 Jan 14 05:19 73 -> 'socket:[53966]'
lrwx------ 1 root root 64 Jan 14 05:19 74 -> 'socket:[51101]'
lrwx------ 1 root root 64 Jan 14 05:19 75 -> 'socket:[51102]'
lrwx------ 1 root root 64 Jan 14 05:19 76 -> 'socket:[51160]'
lrwx------ 1 root root 64 Jan 14 05:19 77 -> 'socket:[51161]'
lrwx------ 1 root root 64 Jan 14 05:19 78 -> 'socket:[51176]'
lrwx------ 1 root root 64 Jan 14 05:19 79 -> 'socket:[51171]'
lrwx------ 1 root root 64 Jan 14 05:19 8 -> 'anon_inode:[timerfd]'
lrwx------ 1 root root 64 Jan 14 05:17 9 -> 'anon_inode:[eventpoll]'
root@ubuntu:/proc/1/fd#
0是标准输入,1是标准输出,2是标准误差,依此类推,其他数字就是打开的fd文件。打开的文件分为以下几种类型的文件描述符:
类型 | 格式 | 含义 |
---|---|---|
管道 | ‘pipe:[25155]’ | 表示这是一个管道文件,inode是50867 |
套接字 | ‘socket:[50867]’ | 表示这是一个套接字文件,inode是50867 |
没有inode的文件描述符 | anon_inode:[eventpoll] | 这里的文件类型是eventpoll,还有其他文件类型,比如timerfd和signalfd |
普通文件描述符 | /dev/input/event2 | 表示该文件是打开 /dev/input/event2返回的fd |
1.1.16 /proc/[pid]/fdinfo
root@ubuntu:/proc/1/fdinfo# ls
0 14 190 200 206 211 217 223 229 234 240 277 30 308 314 32 326 331 34 42 48 53 59 64 7 78
1 15 191 201 207 212 218 224 23 235 241 28 302 309 315 321 327 332 35 43 49 54 6 65 73 79
10 16 192 202 208 213 219 225 230 236 242 29 303 31 316 322 328 334 36 44 5 55 60 66 74 8
11 17 199 203 209 214 22 226 231 238 25 292 304 310 317 323 329 335 4 45 50 56 61 67 75 9
12 18 2 204 21 215 220 227 232 239 26 299 306 311 318 324 33 336 40 46 51 57 62 68 76
13 19 20 205 210 216 221 228 233 24 27 3 307 313 319 325 330 337 41 47 52 58 63 69 77
root@ubuntu:/proc/1/fdinfo# cat 0
pos: 0
flags: 0100002
mnt_id: 26
ino: 5
root@ubuntu:/proc/1/fdinfo# //poll文件描述符
root@ubuntu:/proc/1# cat fdinfo/9
pos: 0
flags: 02000002
mnt_id: 15
ino: 13577
tfd: 10 events: 80000019 data: 563bcf660010 pos:0 ino:6235 sdev:17
tfd: 13 events: 19 data: 563bcf660050 pos:0 ino:3509 sdev:e//时间描述符
root@ubuntu:/proc/1# cat fdinfo/28
pos: 0
flags: 02004002
mnt_id: 15
ino: 13577
clockid: 1
ticks: 0
settime flags: 01
it_value: (74, 678839584)
it_interval: (0, 0)
这是一个子目录,包含进程打开的每个文件的一个条目,由其文件描述符命名。此目录下的文件仅由进程的所有者可读。可以读取每个文件的内容以获得有关相应文件描述符的信息。内容取决于对应的文件描述符所引用的文件类型。对于常规文件和目录,我们会看到值,其含义是:
值 | 例子 | 含义 |
---|---|---|
pos | pos: 0 | 这是一个十进制数字,显示文件偏移量。 |
flags | flags: 02000002 | 这是一个八进制数,显示文件访问模式和文件状态标志(参见open(2))。如果设置了close-on-exec文件描述符标志,则标志还将包括值O_CLOEXEC。 |
mnt_id | mnt_id: 15 | 该字段是包含该文件的挂载点的ID,具体请参见/proc/[pid]/mountinfo的描述。 |
eventfd-count | eventfd-count: 40 | eventfd文件描述符特有,eventfd-count是eventfd计数器的当前值,以十六进制表示。 |
tfd | tfd: 10 events: 80000019 data: 563bcf660010 pos:0 ino:6235 sdev:17 | epoll文件描述符特有,以tfd开头的每一行都描述了通过epoll文件描述符监视的一个文件描述符(有关详细信息,请参阅epoll_ctl(2))。tfd字段是文件描述符的编号。events字段是此文件描述符正在监视的事件的十六进制掩码。data字段是与此文件描述符关联的数据值。 |
sigmask | sigmask: 0000000000000006 | signalfd文件描述符,Sigmask是通过signalfd文件描述符接受的信号的十六进制掩码。(在本例中,位2和位3被设置,分别对应信号SIGINT和SIGQUIT;看到信号(7))。 |
inotify wd | inotify wd:2 ino:7ef82a sdev:800001 mask:800afff ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:2af87e00220ffd73 | wd表示描述符编号(十进制)。ino表示目标文件的inode号,16进制。sdev表示目标文件所在的设备ID(十六进制)。mask表示目标文件被监控事件的掩码(十六进制)。 |
ino | ino: 13577 | 目标文件的inode号(十六进制)。 |
clockid | clockid: 1 | 这是时钟ID的数值,用于标记计时器的进度。 |
ticks | ticks: 0 | 这是已经发生的计时器过期次数(即读取(2)后返回的值)。 |
settime flags | settime flags: 01 | 这个字段列出了timerfd最后一次设置的标志,以八进制为单位 |
it_value | it_value: (74, 678839584) | 此字段包含计时器下一次到期之前的时间量,以秒和纳秒表示。无论计时器是否使用TFD_TIMER_ABSTIME标志创建,它总是以相对值表示。 |
it_interval | it_interval: (0, 0) | 该字段包含计时器的间隔,以秒和纳秒为单位。(it_value和it_interval字段包含该文件描述符上timerfd_gettime(2)将返回的值。) |
1.1.17 /proc/[pid]/gid_map
root@ubuntu:/proc/1# cat gid_map 0 0 4294967295
该文件可以看到进程从用户命名空间映射的组ID的信息。这三个数字含义:
第一个数字:进程pid所在的用户命名空间中用户起始ID。
第二个数字:这里如何解释取决于打开uid_map的进程和进程pid是否在同一个用户命名空间中
- 如果这两个进程在不同的用户名称空间中,第二个数字是打开uid_map的进程的用户名称空间中用户id范围的开始。
- 如果两个进程属于同一个用户命名空间,第二个数字是进程pid的父用户命名空间中用户id范围的开始。这种情况允许uid_map的打开器(这里常见的情况是打开/proc/self/uid_map)查看用户id到创建该用户名称空间的进程的用户名称空间的映射。
第三个数字:映射在两个用户名称空间之间的用户id范围的长度。这里4294967295表示负一。
1.1.18 /proc/[pid]/io
root@ubuntu:/proc/1# cat io
rchar: 1737528570
wchar: 1510335625
syscr: 337293
syscw: 257345
read_bytes: 459443712
write_bytes: 703746048
cancelled_write_bytes: 92532736
该文件包含进程的I/O统计信息,文件中个字段含义如下:
字段 | 全称 | 含义 |
---|---|---|
rchar | characters read | 进程从存储器中读取的字节数。这只是该进程传递给read(2)和类似系统调用的字节之和。它包括像终端I/O这样的东西,并且不受是否需要实际的物理磁盘I/O的影响(读取可能已经从页面缓存中得到满足)。 |
wchar | characters written | 进程已经或将写入磁盘的字节数。这里的注意事项与rchar类似 |
syscr | read syscalls | 统计通过read和pread这样的系统调用尝试读I/O操作的数量 |
syscw | write syscalls | 统计通过write和pwrite这样的系统调用尝试读I/O操作的数量 |
read_bytes | bytes read | 计算该进程实际从存储层获取的字节数。这对于块支持的文件系统是准确的。 |
write_bytes | bytes written | 计算此进程实际发送到存储层的字节数。 |
cancelled_write_bytes | cancelled write bytes | 这个字段表示这个进程通过截断页缓存导致不发生的字节数。任务也可能导致“负”I/O。如果这个进程截断了某个脏页缓存,那么另一个进程(在它的write_bytes中)占用的某个I/O将不会发生。 |
1.1.19 /proc/[pid]/limits
root@ubuntu:/proc/1# cat limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 31362 31362 processes
Max open files 1048576 1048576 files
Max locked memory 67108864 67108864 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 31362 31362 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
该文件显示每个进程的资源限制的软限制、硬限制和度量单位(请参阅getrlimit(2))。
1.1.20 /proc/[pid]/loginuid
root@ubuntu:/proc/1# cat loginuid
4294967295
root@ubuntu:/proc/1# root@ubuntu:/proc/1# cat ../1909/loginuid
1000
root@ubuntu:/proc/1#
4294967295只是(无符号长整数)-1。-1表示未设置loginuid。这是任何登录过程未生成的进程的正常行为(例如,守护进程和内核进程)。loginuid默认为-1;pam_loginuid模块在您登录时(在tty / in DM / via ssh中)将其更改为您的用户ID,并且子进程会保留此值。
root@ubuntu:/proc/1# cat /etc/passwd |grep 1000
jian:x:1000:1000:jian,,,:/home/jian:/bin/bash
1000表示用户jian,登录过。
1.1.21 /proc/[pid]/map_files
root@ubuntu:/proc/1# ll map_files/
total 0
dr-x------ 2 root root 0 Jan 14 07:08 ./
dr-xr-xr-x 9 root root 0 Jan 14 05:17 ../
lr-------- 1 root root 64 Jan 14 22:10 563bcd968000-563bcd99a000 -> /usr/lib/systemd/systemd*
lr-------- 1 root root 64 Jan 14 22:10 563bcd99a000-563bcda58000 -> /usr/lib/systemd/systemd*
lr-------- 1 root root 64 Jan 14 22:10 563bcda58000-563bcdaae000 -> /usr/lib/systemd/systemd*
lr-------- 1 root root 64 Jan 14 22:10 563bcdaae000-563bcdaf4000 -> /usr/lib/systemd/systemd*
lr-------- 1 root root 64 Jan 14 22:10 563bcdaf4000-563bcdaf5000 -> /usr/lib/systemd/systemd*
lr-------- 1 root root 64 Jan 14 22:10 7fe5fc70c000-7fe5fc719000 -> /usr/lib/x86_64-linux-gnu/libm-2.31.so
lr-------- 1 root root 64 Jan 14 22:10 7fe5fc719000-7fe5fc7c0000 -> /usr/lib/x86_64-linux-gnu/libm-2.31.so
lr-------- 1 root root 64 Jan 14 22:10 7fe5fc7c0000-7fe5fc859000 -> /usr/lib/x86_64-linux-gnu/libm-2.31.so
lr-------- 1 root root 64 Jan 14 22:10 7fe5fc859000-7fe5fc85a000 -> /usr/lib/x86_64-linux-gnu/libm-2.31.so
lr-------- 1 root root 64 Jan 14 22:10 7fe5fc85a000-7fe5fc85b000 -> /usr/lib/x86_64-linux-gnu/libm-2.31.so
...
lr-------- 1 root root 64 Jan 14 22:10 7fe5fd75a000-7fe5fd75b000 -> /usr/lib/x86_64-linux-gnu/ld-2.31.so*
这个子目录包含与内存映射文件对应的条目(参见mmap(2))。条目由内存区域的开始和结束地址对命名(用十六进制数表示),并且是到映射文件本身的符号链接。
1.1.22 /proc/[pid]/maps
root@ubuntu:/proc/1# cat maps
563bcd968000-563bcd99a000 r--p 00000000 08:05 32773659 /usr/lib/systemd/systemd
563bcd99a000-563bcda58000 r-xp 00032000 08:05 32773659 /usr/lib/systemd/systemd
563bcda58000-563bcdaae000 r--p 000f0000 08:05 32773659 /usr/lib/systemd/systemd
563bcdaae000-563bcdaf4000 r--p 00145000 08:05 32773659 /usr/lib/systemd/systemd
563bcdaf4000-563bcdaf5000 rw-p 0018b000 08:05 32773659 /usr/lib/systemd/systemd
563bcf65b000-563bcf8f1000 rw-p 00000000 00:00 0 [heap]7fe5fc70c000-7fe5fc719000 r--p 00000000 08:05 32774684 /usr/lib/x86_64-linux-gnu/libm-2.31.so
...
7fe5fd72c000-7fe5fd72d000 r--p 00000000 08:05 32773810 /usr/lib/x86_64-linux-gnu/ld-2.31.so
7fe5fd72d000-7fe5fd750000 r-xp 00001000 08:05 32773810 /usr/lib/x86_64-linux-gnu/ld-2.31.so
7fe5fd750000-7fe5fd758000 r--p 00024000 08:05 32773810 /usr/lib/x86_64-linux-gnu/ld-2.31.so
7fe5fd759000-7fe5fd75a000 r--p 0002c000 08:05 32773810 /usr/lib/x86_64-linux-gnu/ld-2.31.so
7fe5fd75a000-7fe5fd75b000 rw-p 0002d000 08:05 32773810 /usr/lib/x86_64-linux-gnu/ld-2.31.so
7fe5fd75b000-7fe5fd75c000 rw-p 00000000 00:00 0
7ffeefc06000-7ffeefd08000 rw-p 00000000 00:00 0 [stack]
7ffeefd42000-7ffeefd46000 r--p 00000000 00:00 0 [vvar]
7ffeefd46000-7ffeefd48000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall]
该文件包含当前映射的内存区域及其访问权限的文件。
1.1.23 /proc/[pid]/mem
该文件可用于通过open(2)、read(2)和lseek(2)访问进程内存中的页面。
1.1.24 /proc/[pid]/mountinfo
root@ubuntu:/proc/1# cat mountinfo
24 29 0:22 / /sys rw,nosuid,nodev,noexec,relatime shared:7 - sysfs sysfs rw
25 29 0:23 / /proc rw,nosuid,nodev,noexec,relatime shared:14 - proc proc rw
...
该文件包含有关进程的挂载命名空间中的挂载点的信息。它提供了各种信息(例如,传播状态,绑定挂载的挂载根,每个挂载及其父挂载的标识符)。每一部分的含义如下表格所示,这里以第一行输出结果来讲解:
24 29 0:22 / /sys rw,nosuid,nodev,noexec,relatime shared:7 - sysfs sysfs rw
项目 | 值 | 含义 |
---|---|---|
mount ID | 24 | 挂载的唯一ID ,umount后可以重复使用 |
parent ID | 29 | 父挂载的ID |
major:minor | 0:22 | 这个文件系统上文件的st_dev的值 |
root | / | 文件系统中构成这个挂载的根目录的路径名 |
mount point | /sys | 挂载点相对于进程根目录的路径名 |
mount options | rw,nosuid,nodev,noexec,relatime | 每次挂载选项 |
optional fields | shared:7 | 0个或多个“tag[:value]”形式的字段 |
separator | - | 可选字段的末尾用一个连字符标记,用作分隔符 |
filesystem type | sysfs | 格式为“type[.subtype]”的文件系统类型 |
mount source | sysfs | 文件系统特定的信息或“none” |
super options | rw | 每个超级块的选项 |
1.1.25 /proc/[pid]/mounts
root@ubuntu:/proc/1# cat mounts
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
udev /dev devtmpfs rw,nosuid,noexec,relatime,size=4014420k,nr_inodes=1003605,mode=755,inode64 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /run tmpfs rw,nosuid,nodev,noexec,relatime,size=810584k,mode=755,inode64 0 0
/dev/sda5 / ext4 rw,relatime,errors=remount-ro 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev,inode64 0 0
tmpfs /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k,inode64 0 0
tmpfs /sys/fs/cgroup tmpfs ro,nosuid,nodev,noexec,mode=755,inode64 0 0
cgroup2 /sys/fs/cgroup/unified cgroup2 rw,nosuid,nodev,noexec,relatime,nsdelegate 0 0
cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,name=systemd 0 0
pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0
bpf /sys/fs/bpf bpf rw,nosuid,nodev,noexec,relatime,mode=700 0 0
...
该文件列出当前挂载在进程的挂载名称空间中的所有文件系统。
1.1.26 /proc/[pid]/mountstats
root@ubuntu:/proc/1# cat mountstats
device sysfs mounted on /sys with fstype sysfs
device proc mounted on /proc with fstype proc
device udev mounted on /dev with fstype devtmpfs
device devpts mounted on /dev/pts with fstype devpts
device tmpfs mounted on /run with fstype tmpfs
device /dev/sda5 mounted on / with fstype ext4
device securityfs mounted on /sys/kernel/security with fstype securityfs
device tmpfs mounted on /dev/shm with fstype tmpfs
device tmpfs mounted on /run/lock with fstype tmpfs
device tmpfs mounted on /sys/fs/cgroup with fstype tmpfs
device cgroup2 mounted on /sys/fs/cgroup/unified with fstype cgroup2
device cgroup mounted on /sys/fs/cgroup/systemd with fstype cgroup
device pstore mounted on /sys/fs/pstore with fstype pstore
device bpf mounted on /sys/fs/bpf with fstype bpf
device cgroup mounted on /sys/fs/cgroup/cpuset with fstype cgroup
。。。
该文件导出进程的挂载名称空间中有关挂载点的信息(统计信息、配置信息)。该文件仅由进程的所有者可读。
1.1.27 /proc/[pid]/net
此目录包含各种文件和子目录,其中包含有关网络层的信息。更详细的请看后面的/proc]/net章节。
1.1.28 /proc/[pid]/ns
root@ubuntu:/proc/1# ls -l ns
total 0
lrwxrwxrwx 1 root root 0 Jan 15 03:48 cgroup -> 'cgroup:[4026531835]'
lrwxrwxrwx 1 root root 0 Jan 15 03:48 ipc -> 'ipc:[4026531839]'
lrwxrwxrwx 1 root root 0 Jan 15 03:48 mnt -> 'mnt:[4026531841]'
lrwxrwxrwx 1 root root 0 Jan 15 03:48 net -> 'net:[4026531840]'
lrwxrwxrwx 1 root root 0 Jan 15 03:48 pid -> 'pid:[4026531836]'
lrwxrwxrwx 1 root root 0 Jan 15 03:48 pid_for_children -> 'pid:[4026531836]'
lrwxrwxrwx 1 root root 0 Jan 15 03:48 time -> 'time:[4026531834]'
lrwxrwxrwx 1 root root 0 Jan 15 03:48 time_for_children -> 'time:[4026531834]'
lrwxrwxrwx 1 root root 0 Jan 15 03:48 user -> 'user:[4026531837]'
lrwxrwxrwx 1 root root 0 Jan 15 03:48 uts -> 'uts:[4026531838]'
该文件导出进程的命名名称空间中个空间的信息。
1.1.29 /proc/[pid]/numa_maps
root@ubuntu:/proc/1# cat numa_maps
563bcd968000 default file=/usr/lib/systemd/systemd mapped=50 mapmax=2 N0=50 kernelpagesize_kB=4
563bcd99a000 default file=/usr/lib/systemd/systemd mapped=189 mapmax=3 N0=189 kernelpagesize_kB=4
563bcda58000 default file=/usr/lib/systemd/systemd mapped=66 mapmax=3 N0=66 kernelpagesize_kB=4
563bcdaae000 default file=/usr/lib/systemd/systemd anon=63 dirty=63 mapmax=2 active=0 N0=63 kernelpagesize_kB=4
563bcdaf4000 default file=/usr/lib/systemd/systemd anon=1 dirty=1 active=0 N0=1 kernelpagesize_kB=4
563bcf65b000 default heap anon=602 dirty=602 mapmax=2 active=0 N0=602 kernelpagesize_kB=4
7fe5ec000000 default anon=3 dirty=3 active=0 N0=3 kernelpagesize_kB=4
7fe5ec021000 default
7fe5f4000000 default anon=3 dirty=3 active=0 N0=3 kernelpagesize_kB=4
7fe5f4021000 default
7fe5fb703000 default
7fe5fb704000 default anon=2 dirty=2 active=0 N0=2 kernelpagesize_kB=4
7fe5fbf04000 default
7fe5fbf05000 default anon=8 dirty=8 mapmax=2 active=0 N0=8 kernelpagesize_kB=4
7fe5fc70c000 default file=/usr/lib/x86_64-linux-gnu/libm-2.31.so mapped=12 mapmax=72 N0=12 kernelpagesize_kB=4
7fe5fc719000 default file=/usr/lib/x86_64-linux-gnu/libm-2.31.so mapped=62 mapmax=69 N0=62 kernelpagesize_kB=4
1.1.30 /proc/[pid]/oom_adj
root@ubuntu:/proc/1# cat oom_adj
0
该文件可用于调整用于选择在内存不足(OOM)情况下应该杀死哪个进程的分数。内核使用这个值对进程的oom_score值进行位移位操作:有效值在-16到+15之间,加上特殊值-17,这将完全禁用该进程的oom_score。一个大于0的分数增加了这个进程被oom杀手杀死的可能性;小于0的分数会降低这种可能性。这个文件的默认值是0,一个新的进程继承其父进程的oom_adj设置。但是,自Linux 2.6.36以来,这个文件的使用已弃用,取而代之的是/proc/[pid]/oom_score_adj。
1.1.31 /proc/[pid]/oom_score
root@ubuntu:/proc/1# cat oom_score
0
该文件显示内核为选择OOM-killer进程而提供给该进程的当前分数。得分越高,意味着该流程更有可能被oom杀手选中。该分数的基础是进程使用的内存量,增加(+)或减少(-)的因素包括:
- 这个过程是否使用fork创建了很多子进程(+)
- 进程是否运行了很长时间,或者占用了大量的CPU时间(-)
- 进程是否有一个低nice值,也就是> 0的nice值(+)
- 进程是否直接进行硬件访问(-)
1.1.32 /proc/[pid]/oom_score_adj
root@ubuntu:/proc/1# cat oom_score_adj
0
此文件可用于调整用于选择在内存不足条件下杀死哪个进程的。坏度启发式为每个候选任务分配一个值,范围从0(从不终止)到1000(总是终止),以确定哪个进程是目标进程。这些单元大致是进程可能分配的允许内存范围内的一个比例,基于对当前内存和交换使用的估计。例如,如果一个任务正在使用所有允许的内存,那么它的不良评分将是1000。如果它正在使用其允许内存的一半,它的分数将是500。在不良评分中还有一个额外的因素:根进程比其他任务多获得3%的内存。
1.1.33 /proc/[pid]/pagemap
该文件显示了进程的每个虚拟页到物理页帧或交换区域的映射。它为每个虚拟页面包含一个64位值,位的设置如下:
bit | 含义 |
---|---|
63 | 如果置一,表示该页存在于RAM中 |
62 | 如果置一,表示该页存在于交换空间中 |
61 | 表示该页面为文件映射页面或共享匿名页面。 |
57-60 | 零 |
56 | 如果置一,表示页面是独占映射的。 |
55 | 如果置一,表示PTE是脏的 |
0-54 | 如果页面在RAM中(位63),那么这些位提供页帧号,可以用来索引/proc/kpageflags和/proc/kpagecount。如果页面出现在交换中(第62位),那么第4-0位给出交换类型,第54-5位编码交换偏移量。 |
使用下面的代码编译成程序,可以通过这个虚拟地址对应的物理地址:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <errno.h>
#include <stdint.h>
#include <string.h>#define PAGEMAP_ENTRY 8
#define GET_BIT(X,Y) (X & ((uint64_t)1<<Y)) >> Y
#define GET_PFN(X) X & 0x7FFFFFFFFFFFFFconst int __endian_bit = 1;
#define is_bigendian() ( (*(char*)&__endian_bit) == 0 )int i, c, pid, status;
unsigned long virt_addr;
uint64_t read_val, file_offset, page_size;
char path_buf [0x100] = {};
FILE * f;
char *end;int read_pagemap(char * path_buf, unsigned long virt_addr);int main(int argc, char ** argv){if(argc!=3){printf("Argument number is not correct!\n pagemap PID VIRTUAL_ADDRESS\n");return -1;}if(!memcmp(argv[1],"self",sizeof("self"))){sprintf(path_buf, "/proc/self/pagemap");pid = -1;}else{pid = strtol(argv[1],&end, 10);if (end == argv[1] || *end != '\0' || pid<=0){printf("PID must be a positive number or 'self'\n");return -1;}}virt_addr = strtoll(argv[2], NULL, 16);if(pid!=-1)sprintf(path_buf, "/proc/%u/pagemap", pid);page_size = getpagesize();read_pagemap(path_buf, virt_addr);return 0;
}int read_pagemap(char * path_buf, unsigned long virt_addr){printf("Big endian? %d\n", is_bigendian());f = fopen(path_buf, "rb");if(!f){printf("Error! Cannot open %s\n", path_buf);return -1;}//Shifting by virt-addr-offset number of bytes//and multiplying by the size of an address (the size of an entry in pagemap file)file_offset = virt_addr / page_size * PAGEMAP_ENTRY;printf("Vaddr: 0x%lx, Page_size: %lld, Entry_size: %d\n", virt_addr, page_size, PAGEMAP_ENTRY);printf("Reading %s at 0x%llx\n", path_buf, (unsigned long long) file_offset);status = fseek(f, file_offset, SEEK_SET);if(status){perror("Failed to do fseek!");return -1;}errno = 0;read_val = 0;unsigned char c_buf[PAGEMAP_ENTRY];for(i=0; i < PAGEMAP_ENTRY; i++){c = getc(f);if(c==EOF){printf("\nReached end of the file\n");return 0;}if(is_bigendian())c_buf[i] = c;elsec_buf[PAGEMAP_ENTRY - i - 1] = c;printf("[%d]0x%x ", i, c);}for(i=0; i < PAGEMAP_ENTRY; i++){//printf("%d ",c_buf[i]);read_val = (read_val << 8) + c_buf[i];}printf("\n");printf("Result: 0x%llx\n", (unsigned long long) read_val);if(GET_BIT(read_val, 63)) {uint64_t pfn = GET_PFN(read_val);printf("PFN: 0x%llx (0x%llx)\n", pfn, pfn * page_size + virt_addr % page_size);} elseprintf("Page not present\n");if(GET_BIT(read_val, 62))printf("Page swapped\n");fclose(f);return 0;
}
通过gcc编译后,执行如下命令,aa就是程序的名字,1表示进程号,0x7fe5fd529000表示虚拟地址:
jian@ubuntu:~$ sudo ./aa 1 0x7fe5fd529000
[sudo] password for jian:
Big endian? 0
Vaddr: 0x7fe5fd529000, Page_size: 4096, Entry_size: 8
Reading /proc/1/pagemap at 0x3ff2fea948
[0]0xb2 [1]0x4c [2]0x23 [3]0x0 [4]0x0 [5]0x0 [6]0x80 [7]0xa0
Result: 0xa080000000234cb2
PFN: 0x234cb2 (0x234cb2000)
1.1.34 /proc/[pid]/patch_state
root@ubuntu:/proc/1# cat patch_state
-1
1.1.35 /proc/[pid]/personality
root@ubuntu:/proc/1# cat personality
00000000
这个只读文件公开了进程的执行域,十六进制显示。也就是说允许哪个cpu执行。00000000表示全部cpu可以执行,00000001表示cpu0不可以执行。
1.1.36 /proc/[pid]/projid_map
root@ubuntu:/proc/1# cat projid_map0 0 4294967295
1.1.37 /proc/[pid]/root
root@ubuntu:/proc/1# ll root
lrwxrwxrwx 1 root root 0 Jan 14 05:17 root -> //
Linux支持文件系统的每进程根,由chroot系统调用设置。该文件是一个指向进程根目录的符号链接,其行为与exe和fd/*相同。
1.1.38 /proc/[pid]/sched
root@ubuntu:/proc/1# cat sched
systemd (1, #threads: 1)
-------------------------------------------------------------------
se.exec_start : 94545997.349824
se.vruntime : 1579.667011
se.sum_exec_runtime : 3553.995528
se.nr_migrations : 533
nr_switches : 10311
nr_voluntary_switches : 8374
nr_involuntary_switches : 1937
se.load.weight : 1048576
se.avg.load_sum : 1109
se.avg.runnable_sum : 1136355
se.avg.util_sum : 1074578
se.avg.load_avg : 16
se.avg.runnable_avg : 16
se.avg.util_avg : 15
se.avg.last_update_time : 94545997348864
se.avg.util_est.ewma : 37
se.avg.util_est.enqueued : 15
uclamp.min : 0
uclamp.max : 1024
effective uclamp.min : 0
effective uclamp.max : 1024
policy : 0
prio : 120
clock-delta : 17
mm->numa_scan_seq : 0
numa_pages_migrated : 0
numa_preferred_nid : -1
total_numa_faults : 0
current_node=0, numa_group_id=0
numa_faults node=0 task_private=0 task_shared=0 group_private=0 group_shared=0
可以查看进程的调度实体相关的信息。
se.exec_start 是各个调度类维护的时间线信息,两者都频繁更新,cat sched文件中的这个字段没啥参考意义了。
se.vruntime是cfs调度的虚拟时间。
se.sum_exec_runtime表示任务运行的总时间。
se.nr_migrations 记录任务在不同CPU间迁移的次数。
sum_sleep_runtime 统计的是任务测试时间段内 sleep 和 block 两种休眠状态的的时长之和。
nr_switches 表示被切走的总次数 。
nr_voluntary_switches 表示非抢占任务被切走的次数。
nr_involuntary_switches 表示被抢占而导致的任务被切走的次数。
se.load.weight 表示CFS任务的权重,和其优先级挂钩,优先级变化了也会设置 。
policy 表示进程的调度策略。
prio 表示进程的优先级,RT: 0-99,CFS: 100-139,数值越小优先级越高。
clock-delta 是记录一次读取CPU时间需要的时长,涉及到读取硬件,测试发现和 CPU 频点高低无线性关系。
1.1.39 /proc/[pid]/schedstat
root@ubuntu:/proc/1# cat schedstat
3573454261 414543036 10366
1.1.40 /proc/[pid]/sessionid
root@ubuntu:/proc/1# cat sessionid
4294967295
1.1.41 /proc/[pid]/setgroups
root@ubuntu:/proc/1# cat setgroups
allow
该文件用于限制使用setgroups函数设置group的权限,默认是“allow”,此值只能被设置一次,后续设置将会返回错误。
1.1.42 /proc/[pid]/smaps
root@ubuntu:/proc/1# cat smaps
563bcd968000-563bcd99a000 r--p 00000000 08:05 32773659 /usr/lib/systemd/systemd
Size: 200 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Rss: 200 kB
Pss: 100 kB
Shared_Clean: 200 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 200 kB
Anonymous: 0 kB
LazyFree: 0 kB
AnonHugePages: 0 kB
ShmemPmdMapped: 0 kB
FilePmdMapped: 0 kB
Shared_Hugetlb: 0 kB
Private_Hugetlb: 0 kB
Swap: 0 kB
SwapPss: 0 kB
Locked: 0 kB
THPeligible: 0
VmFlags: rd mr mw me sd
563bcd99a000-563bcda58000 r-xp 00032000 08:05 32773659 /usr/lib/systemd/systemd
Size: 760 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Rss: 756 kB
Pss: 353 kB
Shared_Clean: 756 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 756 kB
Anonymous: 0 kB
LazyFree: 0 kB
AnonHugePages: 0 kB
ShmemPmdMapped: 0 kB
FilePmdMapped: 0 kB
Shared_Hugetlb: 0 kB
Private_Hugetlb: 0 kB
Swap: 0 kB
SwapPss: 0 kB
Locked: 0 kB
THPeligible: 0
VmFlags: rd ex mr mw me sd
...
该文件显示了每个进程映射的内存消耗详细情况。
第一行显示的信息与/proc/[pid]/maps中的映射显示的信息相同。下面几行显示了映射的大小、当前驻留在RAM中的映射数量(“Rss”)、进程在该映射中的比例份额(“Pss”)、映射中干净的共享页和不干净的共享页的数量,以及映射中干净的私有页和不干净的私有页的数量。“Referenced”表示当前标记为引用或访问的内存量。“Anonymous”显示不属于任何文件的内存量。“Swap”显示了有多少匿名内存也被使用了,但是在交换时被释放了。“KernelPageSize”行是内核用于备份虚拟内存区域的页大小。“MMUPageSize”行报告MMU使用的页面大小。“Locked”表示映射是否锁定在内存中。“ProtectionKey”行包含与虚拟内存区域相关的内存保护键。“VmFlags”行表示与虚拟内存区域相关的内核标志。
1.1.43 /proc/[pid]/smaps_rollup
root@ubuntu:/proc/1# cat smaps_rollup
563bcd968000-7ffeefd48000 ---p 00000000 00:00 0 [rollup]
Rss: 12784 kB
Pss: 5236 kB
Pss_Anon: 3982 kB
Pss_File: 1254 kB
Pss_Shmem: 0 kB
Shared_Clean: 8308 kB
Shared_Dirty: 924 kB
Private_Clean: 32 kB
Private_Dirty: 3520 kB
Referenced: 12784 kB
Anonymous: 4444 kB
LazyFree: 0 kB
AnonHugePages: 0 kB
ShmemPmdMapped: 0 kB
FilePmdMapped: 0 kB
Shared_Hugetlb: 0 kB
Private_Hugetlb: 0 kB
Swap: 0 kB
SwapPss: 0 kB
Locked: 0 kB
该文件可以提高用户程序的性能,这些用户程序决定一个进程的聚合内存统计数据(例如,总PSS)。
1.1.44 /proc/[pid]/stack
root@ubuntu:/proc/1# cat stack
[<0>] ep_poll+0x55b/0x6a0
[<0>] do_epoll_wait+0xba/0xe0
[<0>] __x64_sys_epoll_wait+0x59/0x90
[<0>] do_syscall_64+0x59/0xc0
[<0>] entry_SYSCALL_64_after_hwframe+0x61/0xcb
该文件提供了该进程内核堆栈中函数调用的符号跟踪。
1.1.45 /proc/[pid]/stat
root@ubuntu:/proc/1# cat stat
1 (systemd) S 0 1 1 0 -1 4194560 65530 9078825 158 7113 57 302 12565 8530 20 0 1 0 70 173490176 3196 18446744073709551615 94814852456448 94814853234277 140732921837168 0 0 0 671173123 4096 1260 1 0 0 17 1 0 0 0 0 0 94814853587856 94814853873704 94814882607104 140732921839318 140732921839343 140732921839343 140732921839597 0
该文件记录进程的状态信息。每一个数字都有自己的含义。
1.1.46 /proc/[pid]/statm
root@ubuntu:/proc/1# cat statm
42356 3196 2085 190 0 5182 0
提供有关内存使用情况的信息(以页为单位)。
第一个数字表示程序总大小。
第二个数字表示常驻集大小
第三个数字表示常驻共享页的数量。
第四个数字表示代码段大小。
第五个数字表示库大小,不过现在没有使用了,一直是0。
第六个数字表示数据段和栈的总和
第七个数字表示脏页数量,不过现在没有使用了,一直是0。
1.1.47 /proc/[pid]/status
root@ubuntu:/proc/1# cat status
Name: systemd //该进程执行的命令
Umask: 0000 //进程Umask标志,以八进制形式表示,前导为零;
State: S (sleeping) //进程的当前状态。“R(运行)”、“S(休眠)”、“D(磁盘休眠)”、“T(停止)”、“T(跟踪停止)”、“Z(僵尸)”或“X(死亡)”之一。
Tgid: 1 //线程组ID(即进程ID)。
Ngid: 0 //NUMA组ID
Pid: 1 //线程ID
PPid: 0 //父进程PID。
TracerPid: 0 //跟踪该进程的PID(如果没有跟踪则为0)。
Uid: 0 0 0 0 //真实的,有效的,保存的集合,和文件系统Uid (Gid)。
Gid: 0 0 0 0 //
FDSize: 512 //当前分配的文件描述符插槽数。
Groups: //补充分组列表
NStgid: 1 //
NSpid: 1 //
NSpgid: 1 //
NSsid: 1 //
VmPeak: 233384 kB //峰值虚拟内存大小
VmSize: 169424 kB //虚拟内存大小
VmLck: 0 kB //锁定内存大小
VmPin: 0 kB //固定内存大小这些页面不能移动,因为需要直接访问物理内存。
VmHWM: 12784 kB //峰值常驻集大小(“高水位标志”)
VmRSS: 12784 kB //常驻集大小。注意,这里的值是RssAnon、RssFile和RssShmem的和
RssAnon: 4444 kB //常驻匿名内存的大小
RssFile: 8340 kB //常驻文件映射的大小
RssShmem: 0 kB //常驻共享内存的大小
VmData: 19696 kB //数据段的大小
VmStk: 1032 kB //堆栈的大小
VmExe: 760 kB //文本段的大小
VmLib: 9552 kB //共享库代码大小
VmPTE: 88 kB //页表项大小
VmSwap: 0 kB //通过匿名私有页面交换出虚拟内存大小
HugetlbPages: 0 kB // hugetlb内存部分的大小(
CoreDumping: 0 //如果进程当前正在转储内核,则值为1
THP_enabled: 1 //
Threads: 1 //包含该线程的进程中的线程数
SigQ: 0/31362 //该字段包含两个以斜杠分隔的数字,。第一个是该真实用户ID当前排队的信号数量,第二个是该进程排队信号数量的资源限制
SigPnd: 0000000000000000 //线程待定信号的掩码
ShdPnd: 0000000000000000 //进程待定信号的掩码
SigBlk: 7be3c0fe28014a03 //表示信号被阻塞的掩码
SigIgn: 0000000000001000 //表示信号被忽略的掩码
SigCgt: 00000001800004ec //表示信号捕获的掩码
CapInh: 0000000000000000 //在可继承集中启用的能力的掩码
CapPrm: 000001ffffffffff //在允许集中启用的能力的掩码
CapEff: 000001ffffffffff //在有效集中启用的能力的掩码
CapBnd: 000001ffffffffff //能力边界集,以十六进制表示
CapAmb: 0000000000000000 //环境能力集,以十六进制表示
NoNewPrivs: 0 //no_new_privs位的值
Seccomp: 0 //进程的Seccomp模式;0表示SECCOMP_MODE_DISABLED;1表示SECCOMP_MODE_STRICT;2表示SECCOMP_MODE_FILTER。
Seccomp_filters: 0 //
Speculation_Store_Bypass: thread vulnerable //推测缺陷缓解状态
SpeculationIndirectBranch: conditional enabled //
Cpus_allowed: ffffffff,ffffffff,ffffffff,ffffffff //该进程可能运行的cpu的十六进制掩码
Cpus_allowed_list: 0-127 //和前面一样,但是是“列表格式”
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: 8489 //自愿上下文切换的数量
nonvoluntary_ctxt_switches: 1946 //非自愿上下文切换的数量
root@ubuntu:/proc/1#
1.1.48 /proc/[pid]/syscall
root@ubuntu:/proc/1# cat syscall
232 0x4 0x563bcf846950 0x90 0xffffffff 0x0 0x3a10 0x7ffeefd070f0 0x7fe5fd64846e
该文件显示系统调用号码和当前进程正在执行的系统调用的参数寄存器,以及堆栈指针和程序计数器寄存器的值。
1.1.49 /proc/[pid]/task
这个目录为进程中的每个线程包含一个子目录。每个子目录的名称是线程的数字线程ID 。在每个子目录中,都有一组与/proc/[pid]目录下具有相同名称和内容的文件。对于所有线程共享的属性,task/[tid]子目录下的每个文件的内容将与父/proc/[pid]目录下的相应文件中的内容相同。对于每个线程都不同的属性,task/[tid]下的相应文件可能有不同的值,或者它们可能根本不存在于/proc/[pid]中。
1.1.50 /proc/[pid]/timens_offsets
root@ubuntu:/proc/1# cat timens_offsets
monotonic 0 0
boottime 0 0
1.1.51 /proc/[pid]/timers
1.1.52 /proc/[pid]/timerslack_ns
root@ubuntu:/proc/1# cat timerslack_ns
50000
1.1.53 /proc/[pid]/uid_map
root@ubuntu:/proc/1# cat uid_map0 0 4294967295
1.1.54 /proc/[pid]/wchan
root@ubuntu:/proc/1# cat wchan
ep_poll
root@ubuntu:/proc/1#
进程在内核中休眠的位置对应的符号名。
1.2 acpi/
1.3 asound/
1.4 bootconfig
1.5 buddyinfo
1.6 bus/
1.7 cgroups
1.8 cmdline
1.9 consoles
1.10 cpuinfo
1.11 crypto
1.12 devices
1.13 diskstats
1.14 dma
1.15 driver/
1.16 dynamic_debug/
1.17 execdomains
1.18 fb
1.19 filesystems
1.20 fs/
1.21 interrupts
1.22 iomem
1.23 ioports
1.24 irq/
1.25 kallsyms
1.26 kcore
1.27 keys
1.28 key-users
1.29 kmsg
1.30 kpagecgroup
1.31 kpagecount
1.32 kpageflags
1.33 loadavg
1.34 locks
1.35 mdstat
1.36 meminfo
1.37 misc
1.38 modules
1.39 mounts
1.40 mpt/
1.41 mtrr
1.42 net -> self/net/
1.43 pagetypeinfo
1.44 partitions
1.45 pressure/
1.46 schedstat
1.47 scsi/
1.48 self
1.49 slabinfo
1.50 softirqs
1.51 stat
1.52 swaps
1.53 sys/
1.54 sysrq-trigger
1.55 sysvipc/
1.56 thread-self
1.57 timer_list
1.58 tty/
1.59 uptime
1.60 version
1.61 version_signature
1.62 vmallocinfo
1.63 vmstat
1.64 zoneinfo
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-4498894.html
如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!
电脑的基本操作
一、电脑的开关机,电脑关机时,不要直接按主机电源直接进行操作,这样极易对硬盘造成损伤。关机前,关闭电脑上所有运行的程序,点击电脑上的”电源“符号,选择关机项。 二、电脑浏览器是经常用到的࿰…...

《拉勾Java高薪课程》阶段一输出 之 IoC容器设计实现及Spring源码分析 - 学习笔记 --菜鸟小回
阶段一模块二学习笔记-Spring高级框架 文章目录阶段一模块二学习笔记-Spring高级框架[toc]一、自定义Ioc&AOP框架1. spring概述2. 核心思想2.1 Ioc2.2 AOP3.手写IOC和AOP3.1银行转账的工厂模式实现3.2事务控制3.3将所有用到的工具类等以bean形式封装到xml中。3.4 手写IOC与…...

2011年20大3D网站
如果要在互联网编年史上描述2011年的话,那么无需任何插件即可在浏览器中直接嵌入支持硬件加速的3D图形一定会被记上重重的一笔。 随着大部分现代浏览器都增加了对WebGL的支持(微软IE除外),以及最近发布的Flash 11,开发…...

基于JAVA+SpringMVC+Mybatis+MYSQL的小学生智能学习系统
小学生智能学习系统主要分为用户管理系统、学生子系统、教师子系统、管理员系统、公告系统。 (1)用户管理系统包括账号的注册、修改。 (2)管理员系统包括对网站公告发布,上传资料,以及对学生、老师信息进行…...

Unity Android 之 jsoup 爬虫爬取新闻信息,并封装给 Unity 调用的方法整理
Unity Android 之 jsoup 爬虫爬取新闻信息,并封装给 Unity 调用的方法整理 目录 Unity Android 之 jsoup 爬虫爬取新闻信息,并封装给 Unity 调用的方法整理 一、简单介绍 二、实现原理 三、注意事项 四、效果预览 五、网页数据分析,以确…...

嵌入式软件开发之模块化程序设计(三)
前言: 模块化程序设计是指在进行程序设计时将一个大程序按照功能划分为若干小程序模块,每个小程序模块完成一个确定的功能,并在这些模块之间建立必要的联系,通过模块的互相协作完成整个功能的程序设计方法。 模块化程序优点 提…...

访问学者在英国访学的美食文化特色
一般的英国家庭一天通常是四餐:早餐、午餐、午茶点和晚餐,英国人也非常注重饮食搭配,现在跟着51访学网小编一起走进英国的美食世界吧。 一、英国的饮食文化简介 英国的饮食文化是指主要流行在英国的饮食文化,包括英格兰饮食、北…...

COCO KeyPoints关键点数据集准备
COCO KeyPoints关键点数据集准备 概述 网上搜了一圈,coco关键点数据集准备的内容比较少,这里写一篇完成的标注流程到数据集准备的文章,以备后忘 标注工具 coco官方标注工具: coco–annotator https://github.com/jsbroks/coco-annotator …...

python 最长递增子串:动态规划
问题描述: 给定一个数组str[5, 3, 4, 8, 6, 7,9],求出其最长递增子串:LongestIncreaseSub[3,4,6,7,9] 解决思路: 解决最长子序列(Longest Increase Subset, LIS)问题,使用动态规划࿰…...

Docker安装Redis并配置启动
文章目录拉取镜像创建挂载目录下载redis.conf文件给配置文件赋权限修改默认配置信息docker启动redis查看是否启动成功其他环境安装相关文章拉取镜像 docker pull redis:5.0.3想要下载其他版本镜像可以到https://hub.docker.com/_/redis 检索然后安装,也可以通过doc…...

数电——高/低电平之间的差异与共同
高电平/低电平引言高电平/低电平数字电路电平与电压的区别引言 首先我们要知道高低电平是从哪里来的,是从哪里出现的高低电平,对于高低电平我们又是如何划分的。 高电平/低电平 什么是高电平?什么又是低电平?高低电平只是一个相…...

SpringBoot 系列教程(十九):基于SpringBoot自定义注解和AOP实现日志记录
目的: 以SpringBoot项目为基础,定义写入日志注解@InsertLog,当项目启动了访问controller时,在标注了注解@InsertLog的controller方法上,将会执行“写入日志到数据库”操作; 实现:定义切面LogAspect,实现自定义注解的生效; 一、环境准备 开发工具: IntelliJ …...

COCO-stuff用法
COCO-stuff API[1]是 COCO API[2]的扩展,安装见 [3],这里研究一下 COCO-stuff 的用法。 Files 下载链见 [4]。 image 训练集图片 train2017.zip、验证集图片 val2017.zip,分别解压出 train2017/ 和 val2017/,然后统一放去 ima…...

MySQL安装失败的原因
1.如果你原先安装过MySQL,后来卸载了再安装失败了,有可能是卸载不干净。 需要手动目录删光所有MySQL相关的文件。这一点MySQL特别坑,吐槽一下。我都卸载完了,你为什么不给我删干净,还要我手动去删,而且还影…...

java面试第一季
文章目录 JavaSE 面试题1、自增变量2、单例模式什么事Singleton?要点:一是某个类只能有一个实例二是他必须自行创建实例三是它必须自行向整个系统提供这个实例 几种常见形式饿汉式:直接创建对象,不存在线程安全问题懒汉式;延迟创建对象 饿…...

【优化】Vue项目如何优化?这篇文章就够了!超全优化方面
文章目录1.在Vue-Cli中自定义webpack配置2.对Vue打包结果的优化2.1分析打包结果2.1.1分析打包结果工具的使用2.1.2查看打包结果2.2优化公共第三方JS库打包体积2.3启动现代化模式的打包方式优化不同浏览器版本的用户2.4组件加载方面的优化2.5首屏显示优化3.总结在开始之前我们介…...

无良软件测试培训机构,退退退
大家好啊,我是大田 无良培训机构套路,到底是什么鬼啊,包就业,包高薪,学生交完钱你就糊弄事,真的很......和好多小伙伴谈过这些培训机构,坑钱的真的占大多数。 其实,学习的途径还是有…...

coco dataset solve
1,下载数据集cocodataset.org 2,download cocoapi: https://github.com/cocodataset/cocoapi 3,install and open jupyter notebook: pip install jupyter jupyter notebook #in cocoapi folder 4,open pycocoDemo.ipynb in browser, compile, error:no module named _m…...

01背包问题(python)
输入样例 4 5 1 2 2 4 3 4 4 5 输出样例 8 解题思路 1.先将输入的第一行中物品的数量和背包的总体积取出 # 取得物品的个数和背包的总体积 a [int(i) for i in input().split()] # 物品的个数 n a[0] # 背包总体积 m a[1] 2.将给出的各个物品的体积和质量分别用两个列…...

极简权限认证必须掌握【代码+原理+建议收藏】
这个极简权限认证必须掌握,代码不过百,但是很关键 小白最近没有来问学委问题,不过前几天,有朋友问到如何进行访问控制,资源控制的,学委特地写了一篇。 这其实就是权限认证,理解并掌握其核心思…...

哪款无线耳机通话效果好?无线蓝牙耳机通话效果排名
蓝牙耳机已经发展到了一个新的高度,各种品牌的产品层出不穷,也导致了很多人对于蓝牙耳机的选择,从关注品牌的也更看着性价比,而现在,很多价格合理的蓝牙耳机,都是值得一试的。临近双十一,是商场…...

史上最详细Docker安装Redis (含每一步的图解)实战
不仅教你安装,还教你删除。 每一行命令都带图解,绝对能懂。 大家对搭建Redis Clustr (Redis 集群)感兴趣的,可以看看这篇文章 Docker搭建Redis Cluster集群环境 希望对大家有所帮助 一、Docker搜索redis镜像 命令:docker search &…...

计算机视觉--CV技术指南文章汇总
前言 本文汇总了过去本公众号原创的、国外博客翻译的、从其它公众号转载的、从知乎转载的等一些比较重要的文章,并按照论文分享、技术总结三个方面进行了一个简单分类。点击每篇文章标题可阅读详细内容 欢迎关注公众号 CV技术指南 ,专注于计算机视觉的…...

【 干货】前端开发 需要注意的事项❗️Be Careful❗️
引子 大家好,我是HoMeTown,从我成为一个职业切图仔至今,满打满算差不多有5年了,想给自己写一个备忘录,针对每个技术,总结一下我在开发中遇到的需要注意的事项,并分享给大家,共勉 Gi…...

利用docker安装启动ClickHouse
一、clickhouse简介 ClickHouse是一个面向列存储的数据库管理系统,可以使用SQL查询实时生成分析数据报告,主要用于OLAP(在线分析处理查询)场景。关于clickhouse原理以及基础知识在以后学习中慢慢总结。(_) 二、安装启动 这里主要描述如何使用docke…...

从青铜到王者的路线,6年菜鸟开发面试字节跳动Android研发岗,移动架构师成长路线
前言 今天我给大家再次分享一下,我最近的一些读书的感想,思考起来,确实能够给自己带来一些真实的帮助和启发,希望大家在平时的工作学习中,也能够认清楚学习的一些本质。 如果我们的学习是在不断掌握应对具体工作场景…...

❤️Python背包问题❤️ 算法图解:第九章:动态规划
📢📢📢📣📣📣 🌻🌻🌻Hello,大家好我叫是Dream呀,一个有趣的Python博主,小白一枚,多多关照😜😜&…...

JAVA 石头剪刀布简单实现
JAVA石头剪刀布的简单实现 V1.0题目:V1.0要求:V1.1要求:V1.2要求:V1.3要求:V1.4要求:V1.0要求及其实现:单例模式:定义:实现:JSON 格式文件保存:Ma…...

嵌入式linux 小屏,基于嵌入式Linux的LCD液晶点阵显示的基本实现
本文以嵌入式Linux为板载系统。写一个测试LCD液晶点阵的小例子,在这个小例子当中主要实现液晶点阵的中文和英文实现。一、前期准备工作1、基本开发环境PC机 : Ubuntu9.10gcc版本 : gcc version 4.3.2板载系统 :Linux(kernel versi…...
Wireshark自定义协议RPUDPDL(UDP下载)插件 (c版)
/* packet-rpudpdl.c** RecordPlayer UDP Download Protocol*//* include files */#include "config.h"#include <glib.h>#include <epan/packet.h>#include <epan/reassemble.h>#include <epan/etypes.h>#include <epan/expert.h>#i...

北京2008奥运会开幕式闭幕式下载(NBC-BT附字幕)
在网上看到有高清晰的北京奥运会开幕式和闭幕式视频下载,用的是世界各国电视台比如NBC&BBC的源(这次CCTV直播非常差,很多优美的地方没有表现出来),对我这种原来看的网络电视的值得再看一次。 开幕式 大家可以到mi…...

每天一道算法题(四) (动态规划算法)01背包问题Java实现
动态规划 动态规划在wiki上的定义: dynamic programming is a method for solving a complex problem by breaking it down into a collection of simpler subproblems, solving each of those subproblems just once, and storing their solutions - ideally, usin…...

python crash coures python编程从入门到实践 笔记1 python常见函数
一些内置函数 str.title() #.function() nothing in parentheses means no argument is given str.upper() str.lower() str.lstrip() str.rstrip()List.append() List.insert() del List[0] List.pop() # remove the last one List.pop(position) # remove by position Li…...

答出多少面试题能吃上饭?
一、基础 1、Java都有哪些数据类型?基本数据类型有哪些?分别占多少字节?多少位?引用数据类型又有哪些? 基本数据类型:byte(1)、short(2)、int&am…...
多线程-- 并发List\队列\Map
多线程-- 并发List\队列\Map(1)并发List(1)并发包中的并发List:CopyOnWriteArrayList(2)主要方法源码解析(1)初始化(2)添加元素【1】添加过程的描…...

openwrt安装docker并启动
在软件包中下载docker和dockerd 也可以自行下载ipk文件安装 安装成功后启动xshell连上openwrt 执行 /etc/init.d/dockerd 启动docker的daemon服务 若要dockerd自启动则执行 ln -s /etc/init.d/dockerd /etc/rc.d/S100docker建立软连接,在系统加载时启动docker服务…...

IDM下载器使用方法详解:百度网盘下载,视频会员一网打尽!
idm是海内外都非常受欢迎的一款下载管理软件。它支持视频媒体嗅探和多线程下载,能够完美替代谷歌Chrome浏览器、Edge浏览器等浏览器的原生下载功能。在浏览器中单击下载链接时,idm将接管浏览器的原生下载工具并加快下载速度,支持HTTP…...

你不知道的JS思考题
思考题 1、对比空值和对象的类型 思路: typeof null "object" typeof {} "object"答案 var a null ; (!a && tpeof a object); 补充: 内置类型typeof null "object" 祖传bug undefined "undefined&…...
centos7上docker安装并启动
从包安装,最简安装方式 更新yum yum update转到 https://download.docker.com/linux/centos/7/x86_64/stable/Packages/ 并下载.rpm要安装的Docker版本的文件安装Docker CE,将下面的路径更改为您下载Docker软件包的路径。 # yum install /path/to/packa…...

0-1背包问题及python实现
0-1背包问题及python实现 1. 问题提出 0-1背包问题是动态规划中入门的经典题型,掌握0-1背包问题背后的本质有助于更好地理解动态规划问题,话不多说,首先来看看0-1背包问题究竟是什么吧~ 问题描述:设有n件物品x1, x2, …, xn…...
【转】让机器“删繁就简”:深度神经网络加速与压缩|VALSE2018之六
https://mp.weixin.qq.com/s?__bizMzI1NTE4NTUwOQ&mid2650331571&idx1&sn9a6429d2ee8adf1b48ebcb0d781667ce&chksmf235beb9c54237af875b85a530aade389481e291168c26e51686e985e0cd711dc7299863808c&mpshare1&scene1&srcid0516KFpSGcQlzwWsO7aaC4a...

智慧城市、智慧园区、智慧工厂、智慧电力等应用案例展示
智慧城市是物理系统,数字系统和人文系统在建筑环境中的有效集成。功能体系包括社会治理、市民服务和产业经济三大类别,具体包括市政、能源、政务、交通、卫健、制造和物流等多个智慧应用。 如今,我们的智慧城市、智慧环境和智慧交通等借助3D与…...

Java面试常问基础
一:Java基础部分 1.面向对象 OOP 面向对象是一种抽象的面向结果的编程思想 三种形态: 封装:对一些属性及功能私有化,并提供get set、方法方便外界调用 继承:子类对象继承父类对象 继承其公共功能 省去了子类对…...

CF-Div2-832 D. Yet Another Problem(bitmask结论)
CF-Div2-832 D. Yet Another Problem(bitmask&结论) 为了方便设每次询问[l,r][l,r][l,r] 的长度为nnn。 注意到: 每次操作不会影响Xor(l,r)Xor(l,r)Xor(l,r)的结果。 所以必要条件1:Xor(l,r)0Xor(l,r)0Xor(l,r)0 然后我们可以发现,我…...

(二)Docker 安装、启动和卸载
文章目录Docker 的运行环境Docker 在Windows h和 Mac OS的安装Windows 环境的安装Docker 在Cent OS 上的安装系统版本要求多种安装方式的选择Yum 安装 DockerDocker 引擎服务的启动和关闭Docker 引擎的卸载参考资料Docker 的运行环境 Docker 可以运行在 Linux、Windows 、Mac …...

python spider tvbanywherena
TVB电视剧北美、加拿大地区地址(需要翻一下才能看):https://tvbanywherena.com/cantonese 如下为完成代码,通过python获取m3u8,下载音、视频切片,解密,合并。 #!/usr/bin/python # -*- codin…...

虚拟机 puppet 安装部署
(1)准备三台centos7虚拟机,并做好基础配置。 用途IP部署的服务HOSTNAMEpuppetmaster192.168.52.130puppet-mastermaster.cluster.compuppetagent192.168.52.131puppetminion1.cluster.compuppetagent192.168.52.132puppetminion2.cluster.co…...

数据结构之双端队列
文章目录前言一、双端队列模型二、双端队列的实现三、在前面插入元素四、在后面插入元素五、检查队列是否为空六、检查队列是否已满总结前言 双端队列有两个端部,首部和尾部,并且项在集合中保持不变。 双端队不同的地方是添加和删除项是非限制性的。可以…...

coco数据集大小分类_Microsoft COCO 数据集
本篇博客主要以介绍MS COCO数据集为目标,分为3个部分:COCO介绍,数据集分类和COCO展示。本人主要下载了其2014年版本的数据,一共有20G左右的图片和500M左右的标签文件。标签文件标记了每个segmentation的像素精确位置bounding box的…...

Word处理控件Aspose.Words功能演示:从 C# 中的 Word 文档中提取图像
图像在说明 Word 文档中的关键信息方面发挥着重要作用。此外,它们使文档更具吸引力并改善其呈现方式。作为一名程序员,您可能会得到一份工作来提取嵌入在 Word DOCX 或 DOC 文档中的图像。为此,本文介绍了如何使用 C# 以编程方式从 Word 文档…...

Web大学生网页作业成品 基于HTML+CSS+JavaScript (刘德华9页 )
⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 个人博客网站 | 个人主页介绍 | 个人简介 | 个人博客设计制作 | 等网站的设计与制作 | 大学生个人HTML网页设计作品 | HTML期末大学生网页设计作业…...

聊聊身边的嵌入式,自拍神器自拍杆
曾几何时,自拍杆风靡世界,火当然是有原因的,这么一个小装备,极大的满足了人们爱拍照的需求,方便好用、经济实惠。恰巧我手上也有一个,收起来时很小、不占地方打开后可随意调节拍照同时它有个隐藏式三脚架功…...

凭借阿里爆款Spring Security笔记,走上大厂996的人生巅峰
Spring Security Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。由于它是Spring生态系统中的一员,因此它伴随着整个Spring生态系统不断修正、升级,在spring boot项目中加入springsecurity更是十分简…...

软件测试常问面试题【二】
软件测试常问面试题【二】 1、APP性能测试遇到什么bug没有? 性能bug:卡顿、ANR、内存泄漏 2、什么是兼容性测试?兼容性测试要测试哪些方面? 主要包括: 不同操作系统版本的兼容(Android的版本有ÿ…...

【职场菜鸟】工作总结与问题解决
目录 目录 工作总结 一、Linux和java环境相关 二、git操作 三、数据表操作 四、java语言学习 五、实际开发相关 六、基础原理探索 遇到的问题 一、postman测试 二、java语言方面问题 三、实际开发问题 工作总结 一、Linux和java环境相关 Linux常用命令 echo find…...

软件构造笔记1
多维软件视图 按阶段划分:构造时/运行时视图按动态性划分:时刻/阶段视图按构造对象的层次划分:代码/构件视图软件建设的五大关键质量目标可理解性可维护性和适应性可重用性健壮性高效性“软件”一词最初是由艾伦图灵提出的软件程序Data文档软…...

敏捷开发总结
一、敏捷开发是一种开发方式敏捷开发,英文是Agile Development,是一种以人为核心、迭代、循序渐进的开发方式,是一种软件开发的流程。它会指导开发人员用规定的环节去一步一步完成项目的开发。由于它采用迭代式开发,所以它主要的驱…...

docker 使用docker-compose启动容器教程
1、安装docker-compose #1、下载docker-compose cd /root && wget https://ghproxy.com/https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-linux-x86_64#2、将dokcer-compose 移动到指定目录下 mv docker-compose-linux-x86_64 /usr/loca…...

一、应用层分析
目录 一、应用层协议原理 二、Web和Http 一、应用层协议原理 1、多个端系统的程序如何通信:使用的基本对象是进程,而不是程序。在应用层面,通信的对象是报文。 2、两个进程之间相互发送报文,使用的是套接字软件接口࿰…...

MSCOCO2017数据集下载
这个数据集我是找了很久,下了很久才下下来的。 链接:https://www.floydhub.com/walter1218/datasets/mscoco/1 本人速度5M/s...

芳华绝代
蒙娜丽莎,只是一幅画,如何艳压天下。唯独是天姿国色,不可一世。时光倒流到17年前的2002年。。。 在香港红馆,梅艳芳极梦幻演唱会上《芳华绝代》天皇巨星张国荣和梅艳芳的演绎令人叫绝,前无古人后无来者,后…...

张国荣:那个看起来在笑的人
张国荣:那个看起来在笑的人 韩松落 张国荣去世已经十一年了,但直到现在,他的死还被人放置在迷雾里,指向各种阴谋、各种神秘故事,因为人们觉得不可能,不可能之一,是他名利富贵全都不缺࿰…...

张国荣的《我》
I am what I am 我永远都爱这样的我 快乐是快乐的方式不只一种 最荣幸是谁都是造物者的光荣 不用闪躲为我喜欢的生活而活 不用粉墨 就站在光明的角落 我就是我是颜色不一样的烟火 天空海阔 要做最坚强的泡沫 我喜欢我让蔷薇开出一种结果 孤独的沙漠里 一样盛放的赤裸裸 多…...

张国荣 这么完美的人,一定是同性恋吧
张国荣永远被大家宠爱着,他大概代表了同性恋明星的最高成就。自杀之后更是封神,女人视他为偶像,弯男把他当信仰,连直男也纷纷把他换成qq头像。每年四月一号都是“全民缅怀哥哥日”。 事实上,他却没有真正出柜过&#x…...

张国荣
张国荣死了有好长时间了吧。 今天在清理房间的时候,在一个音乐盒里边放他的歌。平时是不听音乐的,现在的好歌曲太少了。之前的老东西们的歌也听得有点疲劳了。 只记得是4月1日愚人节那天,哪一年却忘了。可能是04年吧。他一直不会飞࿰…...

《沉默是金》
夜风凛凛 独回望旧事前尘 是以往的我充满怒愤 诬告与指责 积压着满肚气不愤 对谣言反应甚为着紧 受了教训 得了书经的指引 现已看得透不再自困 但觉有分数 不再像以往那般笨 抹泪痕轻快笑着行 冥冥中都早注定你富或贫 是错永不对真永是真 任你怎说安守我本份 始终相…...

怀念张国荣
2003年4月1日,哥哥永远离开了我们。八年过去了,我们依旧清晰的记得他的歌声,他的电影。献上对哥哥最深的敬意,哥哥永远活在我们心中••••••...

揭秘:张国荣葬礼,袁咏仪为何哭到失控?
张国荣2003年4月1日在香港去世,终年46岁。张国荣去世的消息一经爆出,震动了整个华人界,死因至今还是一个谜语。追悼会上,张国荣生前的众多好友谢霆洪金宝等都来了。最令人咂舌的是袁咏仪在张智霖身后哭到失控,没有办法…...

爱张国荣
爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣爱张国荣…...

最爱张国荣
张国荣,真正的明星,有史以来独一无二的一位明星。戏非人生,人生非戏。《I am what I am》,用生命捍卫自己,从古到今,他的精神和气节没有哪个“明星”能相比。《霸王别姬》是其真实反映,从不为腐…...

DNSPod十问夏珍:如何用黑科技“复活”张国荣?
夏珍,腾讯多媒体实验室视频处理技术负责人,张国荣《热情》演唱会修复技术负责人。14年入职腾讯,负责QQ音视频通话的画质优化,业界首推低码率的实时视频美颜,在toC上服务QQ、QQ空间、QQ音乐、微视、全民K歌等产品&#…...

写给张国荣
原文地址:写给张国荣作者: 韩寒冬天花败,春暖花开,有人离去,有人归来。 韩寒,http://weibo.com/hanhan。第一篇长微博,献给我的偶像。2003年4月1日,我在开车从北京回上海的途中。在那…...

python爬取百度贴吧张国荣图片
python爬取张国荣吧张国荣图片 一直喜欢哥哥的歌,也一直听哥哥的歌,突然想着收集一些哥哥的照片,所以写了一个爬虫爬取哥哥的图片,也给大家参考一下; 这里我用的request-html这个包 from requests_html import HTMLSes…...

2015年4月1日愚人节--怀念张国荣
2003年至今,每到四月,春天不太温暖。 今天西安城的天气不大好,下了一天的大雨,感觉整个世界陷入一片潮湿、静谧之中。 在这天不禁有点悲伤,是因为一个逝去的故人 人生已经太匆匆 我好害怕总是泪眼朦胧 忘了我就没有用 …...

我眼中的张国荣
首先,很遗憾在纪念日过去的第一个周末才开始写这些文字。最初是在4月1日前后看了一些关于纪念的文章,但对于其中有些描述甚为气愤,如果当时写东西,唯恐是不理智的言语。 每年4月1日,大家在各种媒体上或多或少会看到关…...
python爬取张国荣吧张国荣图片
一直喜欢哥哥的歌,也一直听哥哥的歌,突然想着收集一些哥哥的照片,所以写了一个爬虫爬取哥哥的图片,也给大家参考一下; 这里我用的request-html这个包 from requests_html import HTMLSession from requests_html imp…...

mybatis之动态SQL常见标签的使用
引入where标签的原因: 在上篇文章使用if语句的查询中,我们在SQL语句后面都写入了where 11,以保证每次都能够查询出结果,但这种方法并不是最合理的,假设我们现在将where后面的11去掉: 如下所示:…...

MapReduce学习之概述和设计构思
该系列博客是对黑马程序员视频的总结,其中很多图片来自于黑马程序员 概述 设计构思...

浅谈nodejs与php设计构思层面上的差异
nodejs最近火的一塌糊涂,那为什么它可以成为千百程序员的新宠呢? 难道只是因为把js搬到了服务端?如果仅仅是这样是迁移了一个运行环境和增加几个模块的话我想完全不可能会得到喜新厌旧的程序员的青睐 nodejs和php的差异主要是两个方面&…...

机器学习的相关软件框架下载安装
文章目录一、Anaconda1. Anaconda 的下载2. Anaconda 的安装3. Anaconda Navigator 打不开问题(不适用所有)二、PyTorch-CPU1. PyTorch 环境创建2. PyTorch 下载3. Jupyter 中使用 PyTorch三、Python 版本升级与包的维护1. 更新 Anaconda2. 查看与更新 p…...
通用工作流引擎数据库设计的简单构思
工作中接触到工作流的概念,于是自己构思了一个简单的通用工作流数据库。 什么是工作流和工作流引擎 百度百科: 工作流(Workflow),指“业务过程的部分或整体在计算机应用环境下的自动化”。是对工作流程及其各操作步骤…...

“笑脸”手机设计构思
内容在:http://xjbclz.banzhu.net/...

Zilliqa 的设计构思 第3部分:使共识更有效
Zilliqa博客发布,Rita译 Nakamoto共识协议(或PoW)不理想以及为什么Zilliqa需要一个不同的共识协议。Zilliqa使用的共识协议被称为实用拜占庭容错(PracticalByzantine Fault Tolerance),简称pBFT࿰…...
一个多层级节点用户树的设计构思
背景: 由于近期一个项目要开发一个多层级用户体系,并且还要支持部分链条的可移动性,经过初步构思,已经有了一个初步的思路,今天在这里简单分享一下。要求: 1. 用户结点数要支持百万级,层级理论上…...

Zilliqa的设计构思 第1部分:网络分片
正如我们之前文章介绍的那样,Zilliqa是一个新的区块链平台,每秒可处理数千个交易, 因此Zilliqa有潜力与VISA和MasterCard等传统的支付方式相匹敌。 更重要的是,Zilliqa的交易吞吐量可以随网络规模增大而近似线性增长。 从这篇文章…...
分布式多级服务器架构设计构思
基础分析 数据通道 Web Http通道Web ZMQ 通道C# ZQM req-rep 通道C# ZMQ sub-pub 通道Java ZQM req-rep 通道Java ZMQ sub-pub 通道UDP 音频流通道 无中心多级分布式服务器 元数据 Mysql 静态数据Mysql 动态数据(设备状态和会话状态)媒体库数据(mp3…...

架构设计:一种远程调用服务的设计构思(zookeeper的一种应用实践)
在深入学习zookeeper我想先给大家介绍一个和zookeeper相关的应用实例,我把这个实例命名为远程调用服务。通过对这种应用实例的描述,我们会对zookeeper应用场景会有深入的了解。 远程调用是系统与系统之间的通信机制,它的另一种理解就是进程间…...

UI设计培训:UI构思创意技巧和方法
想要作为一名合格的UI设计师,那么创意技巧和方法是非常重要的,很多刚入职场的新人或者是工作多年的设计师都会在创意技巧和方法上遇到瓶颈,下面小编为大家整理一些UI构思创意技巧和方法,希望能够帮助到大家。 UI设计培训ÿ…...

张一鸣:不甘平庸的年轻人 全都有同一个特质
http://finance.sina.com.cn/wm/2018-01-27/doc-ifyqyesy2356789.shtml 来源:正和岛 张一鸣,生于 1983,福建龙岩人,与美团王兴、雪球方三文同乡,三人并称龙岩三杰。 2005 年,张一鸣从南开大学毕业ÿ…...

这件事有了新进展 | 经济学人20210529期下载
文 / 王不留(微信公众号:王不留) 1. 昨天正式创建了一个英语学习群,大家在群里已经开始热烈讨论起来。 讨论的话题,可能因为认知层次太高,很多内容,我没看懂,但已经大开眼界。 这几天…...

普通人在互联网上赚钱,这几个道理必须要了解一下
大家好,我是黄宇风。 有很多人私聊我,最喜欢问的一句话就是:怎么在网上赚钱,有什么靠谱的项目推荐吗…… 今天,我又拉黑了一个人。 为什么拉黑呢? 因为他们实在是太懒了,他们但凡用心一点&a…...
泡泡玛特市值千亿背后,我们为什么会为盲盒买单?
最近,一家名叫“泡泡玛特”的玩具公司在港交所挂牌上市,首日市值就冲到了1100亿港币。 后知后觉的我,可能之前有见到过这家店,也有见到过那个瞪着眼、嘟着嘴、板着脸的小玩偶,但我确实没有留意这家玩具店就是泡泡玛特…...

2022年Q3过去了,平常心最重要
一年四季,四季分明。就像春种秋收一样,Q3也是总结收获的季节。可在特定时间里总结回顾有必要吗?总结的意义是什么?我想了想,至少有两个原因。一是时空观。我们需要在特定的时间和空间,专注思考过去的事情。…...

2020年粮食收成如何,卫星遥感交答卷
秋日正浓,秋收的场景在大江南北徐徐铺开。从东北黑土地到中原大地,再到江南鱼米之乡,目前全国秋粮收获进度进入尾声。通过卫星遥感技术,记录下这个特殊之年的丰收答卷。 近年来,高空间、时间和光谱分辨率遥感技术的发展…...

如何化解总想快速崛起导致的焦虑
最近加入了安晓辉老师的知识星球『 副业赚钱 』,每周都会有一些案例浮现出来,比如Qt侠卖自定义控件和GUI方案月入三万(识别下面二维码可查看)。这些案例,一方面会给我们指引和激励,另一方面,也会…...

协同软件市场一盘散沙 春种能否秋收心中没底
当微软和IBM为协同软件市场打得不可开交的时候,中国软件企业正悄然进入这一擂台。 较早介入协同软件市场的中国软件企业是点击科技,其创始人、原新浪网总裁王志东在2002年就研发出了协同软件。此后,面对市场对协同软件的大量需求ÿ…...

年前秋收,年后春种
当我拿着高考志愿书时,看着一个又一个学校和满目的专业时,不知道为什么和同学们三五成群的选了这个学校,也恰恰的选专业选错了选择了这个专业,既然是自己的命运和选择,相信老天也会对我有晴天,认识了这么一…...

春种秋收—朴素的道理
春天种下,辛勤耕耘,秋天才会有收获。 这是大自然的规律。 类似的,一个人当前所处的状态,是以前投资和努力的结果。 而现在的努力,当前是不能立刻显现回报的。 果然将来在将来才能收获。 努力耕作,必有…...

低代码平台助力汽车行业构筑新基建
编者按:本文分析了汽车行业数字化转型的需求,并列举了汽车行业利用低代码平台数字化转型的场景,最后通过华晨汽车案例展示了低代码在实现业务模板集成方面的表现。关键词:数据集成,低代码平台,汽车行业汽车…...
String,StringBuilder,StringBuffer源码分析
声明:本文使用JDK1.8 在Java中,对于字符串的操作有这三种:String、StringBuilder、StringBuffer。这三者的效率是:StringBuilder > StringBuffer > String。 String a "abc"; a a "d"; System.out.…...

浅谈编程能力的培养与提高——写给编程初学者的话
任何科技前进的方向永远都是让更多的人能够更轻松的掌握和使用,因此计算机语言也已经不再是什么高深莫测的天书,很多非计算机专业出身的人都能使用计算机语言来编写程序。无论是一个计算机爱好者,还是一个从事计算机相关行业工作的人,都有可能会使用计算机语言。然而,很多…...

2022尚硅谷SSM框架跟学(五)Spring基础二
2022尚硅谷SSM框架跟学 五Spring基础二3.AOP3.1场景模拟3.1.1声明接口3.1.2创建实现类3.1.3创建带日志功能的实现类3.1.4提出问题(1)现有代码缺陷(2)解决思路(3)困难3.2代理模式3.2.1概念(1)介绍(2)生活中的代理(3)相关术语3.2.2静态代理3.2.3动态代理3.2.4测试3.3AOP概念及相关…...

漫谈区块链的应用场景
原文:http://www.elecfans.com/blockchain/675851.html 关于区块链的应用五花八门,有些是来割韭菜(比如ICO),有些是来蹭热点的(如区块链手机、区块链手表、区块链牙刷等),如何才算是…...

烤仔观察 | “顶流”入局,数字藏品发展进入快车道
烤仔观察开放的精神、独特的视角、认真的态度,观时事、察热点,阐态度,《烤仔观察》站在不一样的角度,陪你看世界。人们对未来生活的期待和想象,仿佛在一夜之间被“元宇宙”激发了出来。我们可以预见未来,人…...

人不是生来被打败的
到了深秋了。我知道,所有的叶子,最终都会飘落。但是,我更知道,初春来临的时刻,每一个树枝,都会抽出嫩芽。 常常听到有人说我笔耕不辍,我很高兴这样的称述。我每次讲座也必然谈起这个话…...

【转】我的大学六年(单片机大师郭天祥原创)
来自: 钢铁无翼之鸟 2010-09-08 10:49:35 看着好东西我就转来咱们组。。。。。 在哈尔滨工程大学五年,我在学校电子创新实验室呆了四年,这四年里创新实验室给我提供了良好的学习环境和完善的实验设备;在这里与众多电子爱好者的交流中…...

从汇编的角度了解C++原理——new和malloc的区别
本文用到的反汇编工具是objconv,使用方法可以看我另一篇文章https://blog.csdn.net/weixin_45001971/article/details/128660642。 1、new和malloc的区别 1.1、例程 转换后,得到汇编代码。 main:sub rsp, 104 /* malloc i…...

关于el-table的current-change
<el-table ref"settingTable" :data"tableData" highlight-current-row current-change"handleCurrentChange" style"width: 100%" ><el-table-column typeindex label"序号" aligncenter></el-table-column…...

CMAKE_CURRENT_BINARY_DIR
代码在git CMAKE_CURRENT_BINARY_DIR 就是当前build 目录 CMakeLists.txt如下 cmake_minimum_required (VERSION 2.8) project (demo) message("当前目录如下...") message("hello") message(${CMAKE_CURRENT_BINARY…...

NavigationDuplicated: Avoided redundant navigation to current location: 解决办法
在使用vue的过程中,重复点击菜单会报以下错误: NavigationDuplicated: Avoided redundant navigation to current location: 解决办法: 在控制台中运行以下命令,安装成功,重新启动即可解决该问题。 npm i vue-router…...

MySQL函数:ON UPDATE CURRENT_TIMESTAMP 与 CURRENT_TIMESTAMP
日常开发总结:MySQL函数:ON UPDATE CURRENT_TIMESTAMP 与 CURRENT_TIMESTAMP 如表的创建语句:重点在于updated_time字段的函数 create table test( id int, updated_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_T…...

Mysql current_time,current_date()与now()区别
current_date()只显示的是当前时间的日期 例如: select current_date() from a ; 结果:2021-08-25current_time()只显示当前时间的时分秒 例如: select CURRENT_TIME() from a ; 14:07:06now()显示全部 例如&#x…...

Rebase Current onto Selected
使用idea合并代码时,一不小心点到Rebase Current onto Selected, 再次提交代码,提示: You probably want to continue rebase instead of committing.Committing during rebase may lead to the commit loss. 解决方法࿱…...

Mysql使用on update current_timestamp
Mysql使用on update current_timestamp注意点 最近项目里时间字段(datetime,timestamp)用到了ON UPDATE CURRENT_TIMESTAMP属性,自动更新列时间戳。以下记录一些需注意的地方。 先说结论: 如果你设置了时间随当前时间戳更新( ON UPDATE CUR…...

axios上传文件错误:Current request is not a multipart request
报错信息 其实整个过程我一共经历了三个报错信息,分别是 1.Current request is not a multipart request:当前请求不是multipart 请求 2.the request was rejected because no multipart boundary was found:请求被拒绝,因为未找…...

小白专场: Merge the incoming changes into the current branc和Rebase the current branch on top of the ...
一 背景介绍 使用idea更新代码时,有2个选项,一个是Merge the incoming changes into the current branch, 另一个是Rebase the current branch on top of the incoming changes。由于是多人多分支开发,笔者经常用的是Rebase这个选…...
where current of语句
PLSQL为循环游标提供了where current of语句的功能,用来避免二次定位游标记录,以提高程序效率。 在此之前,我们已经在做类似的事情,使用的方法是用rowid来定位,因此看到有where current of语法的时候,就想到…...

beeline连接失败 No current connection
beeline 本身其实是不连接hive的,需要额外的配置。 我这里是搭建CDH6.3.1的后配置hive服务遇到的问题 beeline进入后输入show tables 显示的是 No current connection 解决方案1: 在beeline里面输入!connect jdbc:hive2://hadoop001:10000 然后输入存储hive元…...

netcore中使用HttpContext.Current
新建HttpContext类 using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Text;namespace Web.Common {/// <summary>/// http上下文…...
current sink/source, current mirror and current reference
Current sink/source(电流源):饱和区MOS管就可以当作一个电流源, Current mirror(电流镜):可以说是current sink/source的一种延展。其设计原则是:若两个管子宽长比相同,而且两管子具有相等的VG…...

AntDB-M数据库锁分析,不要错过!
AntDB数据库始于2008年,在运营商的核心系统上,为全国24个省份的10亿多用户提供在线服务,具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔通信核心交易,保障系统持续稳定运行近十年,并在通信、…...

Android开发之给apk签名
前言最近360加固助手签名突然收费了,加固完后要自己签名了。在此记录一下自己使用命令行签名步骤。正文首先在安装Android Studio的情况下找到SDK安装目录,在build-tools目录下有自己下载的SDK版本,随便打开一个版本,找到apksigne…...

设计模式快速复习
文章目录设计模式快速复习创建型模式结构型模式行为模式设计模式快速复习 对 Design Pattern Explanation with C Implementation(By K_Eckel) 的阅读总结 创建型模式 Factory :提供一个专门用来创建对象的工厂类,而不是直接使…...

web网络协议
一、 OSI 模型 OSI Open System Interconnect 开放式系统互联 分层:物理层,数据链路层,网络层,传输层,会话层,表示层、应用层 物理层 二进制传输 为传输数据所需要的物理链路进行创建、维持、拆除 常见设…...

AWS白皮书 – 可靠性
本文讲解AWS良好架构框架(AWS Well-Architected Framework)里其中五大支柱之一:可靠性(Reliability)。 可靠性支柱包含系统从基础设施或者服务中断的状态下进行恢复的能力、动态获取资源以满足需求的能力以及缓解错误…...

【必看】最全开窗函数讲解和实战指南
窗口函数(Window Function)是 SQL2003 标准中定义的一项新特性,并在 SQL2011、SQL2016 中又加以完善,添加了若干拓展。 一.窗口函数有什么用? 在日常工作中,经常会遇到需要在每组内排名,比如下面…...

简单描述一个最简化的Angular项目代码
使用Angular CLI新建一个最简单的Angular项目 夜晚闲来无事,来分析一个使用Angular CLI创建的最简化的Angular项目代码。在这之前,我需要确保电脑上搭建好了Angular的开发环境,其中包括以下几项: 首先,电脑上安装Nod…...

rust打印和使用命令行参数
let age 38;let info format!("My age is {age}", age32);println!("{info}, age is:{age}", infoinfo, ageage);output: My age is 32, age is:38let defaultname "zxpo";let age 36;println!("{:0>width$}", age, width 10...

【剧前爆米花--爪哇岛寻宝】java--线程不安全的原因及解决方法
作者:困了电视剧 专栏:《JavaEE初阶》 文章分布:这是关于线程安全相关的文章,在该文章中,我梳理了造成线程不安全的原因和使线程变安全的方法,希望对你有所帮助! 目录 线程的安全问题 什么是线…...

[MFSAN]Aligning Domain-specific Distribution and Classifier
一、Abstract摘要多源域到目标域的迁移学习,之前的大部分为单源域迁移学习即SUDA,这篇论文针对MUDA方法。之前的多源域迁移问题非常常见的一种方法就是,将所有的源域合并成一个单源域并且对齐分布(同SUDA方法一样)&…...

platform设备驱动实验
一、Linux 驱动的分离与分层 1、驱动的分隔与分离 传统驱动编写思路如下图: 下图这个就是 Linux 中的总线(bus)、驱动(driver)和设备(device)模型,也就是常说的驱动分离。 2、驱动的分层 分层的目的也是为了在不同的层处理不同的内容,以…...

this的指向以及更改方法
(一)this的指向 (1)普通函数的this指向, 谁调用指向谁,没有调用者的时候指向window (2)箭头函数的this指向 箭头函数本身没有this,箭头函数中this的引用就是最近作用域中的this(父级的this)…...

Android ServiceManager进阶
一:概要对android的binder通信机制,服务进程通过向 ServiceManager 添加对应的服务aidl实现binder对象,向其他应用提供服务能力。客户进程则是通过对应服务名从 ServiceManager 中获取对应的服务binder对象。android在最新版本中有三个不同的…...

小菜鸟Python历险记:(第四集)
今天写的文章是记录我从零开始学习Python的全过程。在Python中函数是非常重要的,这里也可以称为方法。在前面分享的几篇文章中用到的方法有print(),str(),int().这些都是方法,而除了上面写的这几种内置方法以外,我们也可以自己在程序中自定义…...

flink processFunction算子
flink processFunction算子 1 process function 概述1 process function 概述 process function 相对于前文所述的 map、flatmap、filter 算子来说,最大的区别是其让开发人员对数据 的 处 理 逻 辑 拥 有 更 大 的 自 由 度 ; 同 时 , Proce…...

【Git使用学习】本地项目更改以及相对应的Github操作
接上一节,因为是vue项目,导致有很多的node_modules需要安装,如果将这个文件夹也一同上传到github中,太慢了。因此上一节将这个文件夹删除了。但是,在本地运行的时候,这个文件夹不能删,不然就跑不…...

接口测试——电商网站接口测试实战(四)
1. 接口测试需求分析 常见接口文档提供的两种方式 ①word文档 ②在线文档 电商网站网址模拟练习:http://111.231.103.117:8083/swagger-ui.html 2. 登陆的分析 慕慕生鲜网址:http://111.231.103.117/#/login账号密码 点击execute后 输入账号密码后点…...

kettle—资源库详解
资源库 数据库资源库是将作业和转换相关的信息存储在数据库中,执行的时候直接去数据库读取信息,很容易跨平台使用,但是这里的资源库也不一定非要是数据库,目前支持三种,我们先看一下怎么进入资源库配置,我们在kettle 界面的右上角,有个connect ,这就是我们资源库的配置…...

解决Vue数组数据变化了,赋值后视图没更新的问题
最近遇到一个问题,表格数据变化了,直接赋值后视图没更新,打印表格数据发现是最新的数据,这主要是因为,Vue.js 不能检测到对象属性的添加或删除。因为 Vue.js 在初始化实例时将属性转为 getter/setter,所以属…...

SDK02- 窗口创建
窗口创建的六要素: 设计注册窗口类创建窗口实例显示窗口更新窗口消息循环窗口过程函数 设计注册窗口类 typedef struct _WNDCLASS { UINT style; //风格WNDPROC lpfnWndProc; //函数过程int cbClsExtra; //默认为0int cbWndExtra; //默认…...

三十二、实战演练之接口自动化平台的模型创建、项目管理接口设计
1. 模型编写 根据项目需求分析和数据库设计,我们创建项目应用,测试计划应用,测试报告应用,bug应用: django-admin startapp projects django-admin startapp testplans django-admin startapp reports django-admin …...

QT | 编写一个简单的上位机
QT | 编写一个简单的上位机 时间:2023-03-19 参考: 1.易懂 | 手把手教你编写你的第一个上位机 2.QT中修改窗口的标题和图标 3.图标下载 1.打开QT Creator 2.新建工程 Qt Creator 可以创建多种项目,在最左侧的列表框中单击“Application”&am…...

Python(白银时代)——面向对象
基本概念 面向过程 是早期的一个编程概念,类似函数,但是没有返回值 具体做法: 把完成某个需求的所有步骤,从头到尾 逐步实现 将某些功能独立的代码 封装成一个又一个 函数 然后顺序调用不同的函数 特点: 注重 步骤…...

5.方法(最全C#方法攻略)
目录 5.1 方法的结构 5.2 方法体内部的代码执行 5.3.1 类型推断和Var关键字 5.3.2 嵌套块中的本地变量 5.4 本地常量 5.5 控制流 5.6 方法调用 5.7 返回值 5.8 返回语句和void 方法 5.9 参数 5.9.1 形参 5.9.2 实参 位置参数示例 5.10 值参数 5.11 引用参数 5.12…...

C++中的多态与虚函数
多态是面向对象程序设计的关键技术之一。若程序设计语言不支持多态行,不能称为面向对象的语言。 多态性是考虑在不同层次类中,以及在同一类中,同名成员函数之间的问题。 函数重载,运算符重载,属于编译时的多态性。 以类…...

LeetCode算法 不同路径 和 不同路径II C++
目录题目 不同路径参考答案题目 不同路径II参考答案题目 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finis…...

Windows 下修改Tomcat jvm参数
一、设置Windows服务自动启动方式修改 修改注册表或者修改运行tomcatW.exe出来的“Java”选项都行 1、注册表修改 运行:regedit 找到: (64位操作系统)HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Pr…...

【独家】华为OD机试 - 猜字谜(C 语言解题)
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧本期题目:猜字谜 题目 小王设计了一…...

Python自动化测试实战篇(7),初识pytest做一个简单的接口测试,allure输出可视化测试报告
这些是之前的文章,里面有一些基础的知识点在前面由于前面已经有写过,所以这一篇就不再详细对之前的内容进行描述 Python自动化测试实战篇(1)读取xlsx中账户密码,unittest框架实现通过requests接口post登录网站请求&…...

CKA认证考试难不难?考试内容是什么?
我们的社会在不断进步,市场对于人才的要求也越来越高,而随着第四次工业革命的发展,各个国家都在奋力研发信息通讯技术,旨在为了能够获得最先进的技术,而CKA则是非常重要的一项。CKA认证考试是由Linux基金会和云原生计算…...

DETR模型训练
前面在完成了DETR模型的构建后,我们接下来便是进行数据集构造与模型训练了,模型训练阶段会涉及到网络前向传播与后向传播,这才是真正的难点。 数据集构造 创建数据集 在数据集构造前其首先进行了优化器的选择与学习策略的选择。随后创建数…...

一文弄懂熵、交叉熵和kl散度(相对熵)
一个系统中事件发生的概率越大,也就是其确定性越大,则其包含的信息量越少,可以认为一个事件的信息量就是该事件发生难度的度量,事件所包含的信息量越大则其发生的难度越大。并且相互独立的事件,信息量具有可加性。相互…...
计算机科学导论笔记(十五)
目录 十七、计算理论 17.1 简单语言 17.1.1 简单语句的威力 17.2 图灵机 17.2.1 图灵机的组成部件 17.2.2 对简单语言的模拟 17.2.3 邱奇-图灵论题 17.3 哥德尔数 17.3.1 表示一个程序 17.3.2 翻译一个数字 17.4 停机问题 17.4.1 停机问题是不可解的 17.5 问题的复…...

基于java下Springboot框架实现社区维修平台系统展示
基于java下Springboot框架实现社区维修平台系统开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven…...

Unreal Engine 网络系统(一):网络模型及网络视角下的Gameplay框架
个人学习记录,如有错误请及时联系我!欢迎交流! 1.客户端-服务器模型 服务器:有一个客户端担当游戏状态的主控者 作用:做出所有重要决定,保证公平性,包含所有主控状态,处理客户端连接…...

如何修改百度百科上的介绍,高级别账号更容易成功吗?
个人或企业想要修改原有百科词条上的介绍,但却又不知道如何入手。怎样才能拥有更高级别的百科账号,高级别百科账号更容易成功修改通过吗,以下洛希爱做百科网为大家简单介绍。一、拥有百科高级账号的条件1、首先帐号必须达到4级2、通过率必须在…...

关于element-plus按需引入时,在vite中使用自定义主题失效的问题解决
1. 问题产生过程描述: 1)使用vite创建vue3项目 2)按部就班的安装element-plus vue-router axios npm i element-plus vue-router axios -S 3) 把element-plus按需引入按照官网的步骤操作好 主题 | Element Plus 4)axios按…...

java中堆栈的实现总结
java中堆栈的实现总结1. Java中的Stack1.1 Stack类的使用1.2 Stack类的分析2. java中的queue2.1 queue的方法定义2.2 Deque2.3 Queue的常见实现类3. 总结1. Java中的Stack 1.1 Stack类的使用 Stack的声明如下,可以看到Stack继承了Vector,因此Stack可以…...

Java面试总结篇
引用介绍 1.线程安全不安全的概念 线程安全: 指多个线程在执行同一段代码的时候采用加锁机制,使每次的执行结果和单线程执行的结果都是一样的,不存在执行程序时出现意外结果。 线程不安全: 是指不提供加锁机制保护,有可能出现多个线程先后更改数据造成所得到的数据是脏…...

离散选择模型中的分散系数theta到底该放在哪里呢?
前言 \quad~~一直都在想为啥子离散选择模型中分散系数以分母形式出现而在路径选择公式中以系数形式出现呢?看着公式想了想,现在想出了一个似乎感觉应该差不多很合理的答案,希望与大家一起探讨。 进入正题 根据随机效用理论,决策…...

网站经常被DDOS攻击的原因有哪些
过去这几年,互联网创业热潮非常火,几乎所有行业都向互联网转型。很多互联网公司都会经历被 DDoS 攻击,导致网站服务瘫痪,用户流失以及公司信用度的负面影响。什么是 DDOS 攻击呢?DDOS 攻击是通过控制大量僵尸网络向服务…...

实验二 数据库的查询
目录 一、实验学时 二、实验目的 三、实验要求 四、实验内容 五、实验思考 六、不问初心,方得始终,加油,诸君!!! 一、实验学时 2学时 二、实验目的 (1)掌握查询的概念和方法。…...

Java中的JSON序列化和反序列化
文章目录Java 和 JSON 序列化JSON 简介JSON 是什么JSON 标准JSON 优缺点JSON 工具Java JSON 库JSON 编码指南Fastjson 应用添加 maven 依赖Fastjson API定义 Bean序列化反序列化Fastjson 注解JSONFieldJSONTypeJackson 应用添加 maven 依赖Jackson API序列化反序列化容器的序列…...

数据结构和算法(1):数组
目录概述动态数组二维数组局部性原理越界检查概述 定义 在计算机科学中,数组是由一组元素(值或变量)组成的数据结构,每个元素有至少一个索引或键来标识 In computer science, an array is a data structure consisting of a col…...

第一章 作业【编译原理】
课堂测试【编译原理】前言推荐第一章 作业课堂测试课前测03-01课后练习03-01课后复习03-08课前热身03-13最后前言 2023-3-13 20:56:25 以下内容源自《编译原理》 仅供学习交流使用 推荐 无 第一章 作业 无 课堂测试 课前测03-01 1(多选题) 编译原理各阶段的工作都涉及…...

接口测试用例怎么编写?给你一个最详细的模板要不要?
目录 接口测试用例 总部用户同步接口 添加组织 添加用户 删除组织 删除用户 更新组织 更新用户 应用系统同步用户接口 根据组织编码获取用户 根据系统编码获取用户 构型数据的集成 获取构型数据接口 接口测试用例 总部用户同步接口 添加组织 编制人 薛郝 审定…...

基于深度学习的动物识别系统(YOLOv5清新界面版,Python代码)
摘要:动物识别系统用于识别和统计常见动物数量,通过深度学习技术检测日常几种动物图像识别,支持图片、视频和摄像头画面等形式。在介绍算法原理的同时,给出Python的实现代码、训练数据集以及PyQt的UI界面。动物识别系统主要用于常…...

大数据框架保姆级安装教程——Kafka(3.0.0)
大数据框架保姆级安装教程——Kafka(3.0.0) 1.1 安装部署 1.1.1 集群规划 hadoop102hadoop103hadoop104zkzkzkkafkakafkakafka 1.1.2 集群部署 **0)**官方下载地址:http://kafka.apache.org/downloads.html **1)*…...

医药行业的数据分析,我们需要了解什么?
近三年我们被疫情包围了,医院和药品备受关注,在进行数据分析,不仅需要通用的统计分析技能,更需要对行业、对业务的高度理解。像医药行业的数据分析,就需要数据分析人员深入行业内部,掌握关键的指标和术语。…...

小工具2:Windows curl.exe
以语雀 文档为准 GitHub 仓库:https://github.com/curl/curlGitHub 仓库 Windows 版:https://github.com/curl/curl-for-win下载页面:https://curl.se/download.htmlWindows 版下载页面:https://curl.se/windows/ 支持 64 位&…...

《C++ Primer Plus》(第6版)第13章编程练习
《C Primer Plus》(第6版)第13章编程练习《C Primer Plus》(第6版)第13章编程练习1. Cd类2. 使用动态内存分配重做练习13. baseDMA、lacksDMA、hasDMA类4. Port类和VintagePort类《C Primer Plus》(第6版)第…...

如何配置VoLTE, ViLTE and VoWifi(IMS config for VoLTE, ViLTE and VoWifi)
如何打开VoLTE,ViLTE,VoWifi Feature (How to enable VoLTE,ViLTE,VoWifi feature option) VoWifi有些module属于binary release,如果基线版本不支持VoWifi, 请使用[Patch Release]模板提交eservice给CPM申请open VoWi…...

leetcode 1458 两个子序列的最大点积
给你两个数组 nums1 和 nums2 。 请你返回 nums1 和 nums2 中两个长度相同的 非空 子序列的最大点积。 数组的非空子序列是通过删除原数组中某些元素(可能一个也不删除)后剩余数字组成的序列,但不能改变数字间相对顺序。比方说,…...

【每日随笔】西游记相关随笔 ( 天庭的结构以及人事关系 | 天庭组织架构 | 佛门组织架构 | 天庭的盘根错节 | 西游记中的人情世故 )
文章目录一、天庭组织架构二、佛门组织架构三、天庭的盘根错节四、西游记中的人情世故西游记 和 红楼梦 每一个细节都 蕴含了 大智慧 , 值的每个人都去精读 , 是中国古代智慧的集大成者 ; 西游记 讲的不是 打打杀杀 , 讲的是 人情世故 ; 西游记 反应的是 明朝嘉靖年间 的 政治…...

用两个栈实现队列(LeetCode)算法题
直接进入主题 就是这样了,如果没有仔细看题的话,请回去再仔细看一下 下面开讲 先讲思路在来代码 首先我们想一下队列的性质,队列是先进先出,而栈是后进先出,所以如果想要用栈实现队列,那么一个栈肯定是不…...

机器人运动-力混合控制
#关节动力学 #运动控制 #力控制 详细可参考书本:《现代机器人学:机构规划与控制》第11.5章,其中的动力学方程见第8章相关内容。 其他参考资料: [【现代机器人学】学习笔记十:机器人控制_zkk9527的博客-CSDN博客] 力控制 关节空间…...

3分钟了解热成像仪
3分钟了解热成像仪随着社会老龄化程度的逐步加重,越来越多人喜欢养宠物,这样身边多了一种“陪伴”。但随之而来的宠物丢失以及误入狭小空间或者隐秘空间的情况也层出不穷,比如猫猫躲进汽车底盘,进入天花板/管道隔层等,…...

vulnhub之XXE靶机详解
vulnhub之XXE靶机详解前言一、靶机安装二、信息收集阶段1. 环境2. 探测局域网主机3. 信息收集三、解题相关网站前言 拒绝水文,从我做起,如果如下教程有看不懂的,直接call小编哦 一、靶机安装 靶机下载地址:https: //download.vul…...

多线程的理论基础
为什么需要多线程? 大家都知道,CPU、内存、I/O 设备的速度是有极大差异的,为了合理利用 CPU 的高性能,平衡这三者的速度差异,计算机体系结构、操作系统、编译程序都做出了贡献,主要体现为: CPU 增加了缓存&…...

SC8P1762E_汇编指令一览表
控制类 NOP, 空操作 STOP, 进入休眠模式 CLRWDT, 清零看门狗计数器 数据传送 LD,在汇编语言中通常指的是Load LDIA i, 立即数 i 送给 ACC LDIA的全称是Load Immediate to Accumulator,意思是“将立即数加载…...