• linux Tips


      本文收集网上linux下的一些tips:

      1 /proc/pid/maps:进程的虚拟地址空间

    该文件有6列,分别为:
    地址:库在进程里地址范围
    权限:虚拟内存的权限,r=读,w=写,x=,s=共享,p=私有;
    偏移量:库在进程里地址范围
    设备:映像文件的主设备号和次设备号;
    节点:映像文件的节点号;
    路径: 映像文件的路径
    每项都与一个vm_area_struct结构成员对应,
    范例:
    应用程序的正文段(权限为r-xp)从0x08048000到0x08049000,大小为4096;数据段从0x08049000到0x0804a000,大小为1KB。该应用程序使用了两个库:lib和libc。Libc的正文段从0x00391000到0x004b4000,大小为1164KB;数据段从0x004b5000到0x004b8000,大小为12KB.
    Ld的正文段从00378000到0038d000,大小为84KB;数据段从0x0038e000到0x0038f000,大小为4KB。该应用程序所使用的库所占的虚拟空间的大小从0x4b8000到0x378000,大小为1280KB,其实真正大小为VmLib(1251KB);因为是按页分配,每页大小为4KB。
    [root@localhost ~]# cat /proc/7114/maps
    
    地址                        权限  文件地址偏移          设备    节点      路径
    08047000-080dc000 r-xp 00000000 03:06 884901 /bin/bash
    080dc000-080e3000 rwxp 00094000 03:06 884901 /bin/bash
    080e3000-08129000 rwxp 080e3000 00:00 0 [heap]
    4d575000-4d58a000 r-xp 00000000 03:06 736549 /lib/ld-2.3.4.so
    4d58a000-4d58b000 r-xp 00015000 03:06 736549 /lib/ld-2.3.4.so
    4d58b000-4d58c000 rwxp 00016000 03:06 736549 /lib/ld-2.3.4.so
    4d58e000-4d6b1000 r-xp 00000000 03:06 736550/lib/tls/libc-2.3.4.so
    4d6b1000-4d6b2000 r-xp 00123000 03:06 736550/lib/tls/libc-2.3.4.so
    4d6b2000-4d6b5000 rwxp 00124000 03:06 736550/lib/tls/libc-2.3.4.so
    参数 解释
    address: 0085d000-00872000虚拟内存区域的起始和终止地址文件所占的地址空间
    perms:rw-p 权限:r=read, w=write, x=execute, s=shared,p=private(copy on write)
    offset: 00000000 虚拟内存区域在被映射文件中的偏移量
    dev: 03:08 文件的主设备号和次设备号
    inode: 设备的节点号,0表示没有节点与内存相对应
    name: /lib/ld-2.3.4.so 被映射文件的文件名;执行文件存放的是代码段:r-xp和数据段:rwxp,但共享库却有三个,还有一个是什么?(dannerWorking:http://bbs.chinaunix.net/thread-3596418-1-1.html 阅读理解,再回看android linker中关于segment mmap是代码追加so加载博文)
    各共享库的代码段,存放着二进制可执行的机器指令,是由kernel把该库ELF文件的代码段map到虚存空间;
    各共享库的数据段,存放着程序执行所需的全局变量,是由kernel把ELF文件的数据段map到虚存空间;
    用户代码段,存放着二进制形式的可执行的机器指令,是由kernel把ELF文件的代码段map到虚存空间;
    用户数据段之上是代码段,存放着程序执行所需的全局变量,是由kernel把ELF文件的数据段map到虚存空间;
    用户数据段之下是堆(heap),当且仅当malloc调用时存在,是由kernel把匿名内存map到虚存空间,堆则在程序中没有调用malloc的情况下不存在;
    用户数据段之下是栈(stack),作为进程的临时数据区,是由kernel把匿名内存map到虚存空间,栈空间的增长方向是从高地址到低地址。
    View Code

      2 /proc/pid/status  cat status

    Name: gedit /*进程的程序名*/
    State: S (sleeping) /*进程的状态信息*/
    Tgid: 9744 /*线程组号*/
    Pid: 9744 /*进程pid*/
    PPid: 7672 /*父进程的pid*/
    TracerPid: 0 /*跟踪进程的pid,若没有被跟踪则为0,这可被用于检测进程是否被ptrace*/
    Uid: 1000    1000    1000    1000 /*uid euid suid fsuid*/
    Gid: 1000    1000    1000    1000 /*gid egid sgid fsgid*/
    FDSize: 256 /*文件描述符的最大个数,file->fds*/
    Groups: 0 4 20 24 25 29 30 44 46 107 109 115 124 1000 /*启动该进程的用户所属的组的id*/
    VmPeak: 60184 kB /*进程地址空间的大小*/
    VmSize: 60180 kB /*进程虚拟地址空间的大小reserved_vm:进程在预留或特殊的内存间的物理页*/
    VmLck: 0 kB /*进程已经锁住的物理内存的大小.锁住的物理内存不能交换到硬盘*/
    VmHWM: 18020 kB /*文件内存映射和匿名内存映射的大小*/
    VmRSS: 18020 kB /*应用程序正在使用的物理内存的大小,就是用ps命令的参数rss的值 (rss)*/
    VmData: 12240 kB /*程序数据段的大小(所占虚拟内存的大小),存放初始化了的数据*/
    VmStk: 84 kB /*进程在用户态的栈的大小*/
    VmExe: 576 kB /*程序所拥有的可执行虚拟内存的大小,代码段,不包括任务使用的库 */
    VmLib: 21072 kB /*被映像到任务的虚拟内存空间的库的大小*/
    VmPTE: 56 kB /*该进程的所有页表的大小*/
    Threads: 1 /*共享使用该信号描述符的任务的个数*/
    SigQ: 0/8183 /*待处理信号的个数/目前最大可以处理的信号的个数*/
    SigPnd: 0000000000000000 /*屏蔽位,存储了该线程的待处理信号*/
    ShdPnd: 0000000000000000 /*屏蔽位,存储了该线程组的待处理信号*/
    SigBlk: 0000000000000000 /*存放被阻塞的信号*/
    SigIgn: 0000000000001000 /*存放被忽略的信号*/
    SigCgt: 0000000180000000 /*存放被俘获到的信号*/
    CapInh: 0000000000000000 /*能被当前进程执行的程序的继承的能力*/
    CapPrm: 0000000000000000 /*进程能够使用的能力,可以包含CapEff中没有的能力,这些能力是被进程自己临时放弃的*/
    CapEff: 0000000000000000 /*是CapPrm的一个子集,进程放弃没有必要的能力有利于提高安全性*/
    Cpus_allowed: 01 /*可以执行该进程的CPU掩码集*/
    Mems_allowed: 1 /**/
    voluntary_ctxt_switches: 1241 /*进程主动切换的次数*/
    nonvoluntary_ctxt_switches: 717 /*进程被动切换的次数*/
    View Code

      3 /proc/name/cmdline

      dannerWorking

      

      4 ulimint 此命令用来限制当前用户各种限制

    /* 功能说明:控制shell程序的资源。
    
    语  法:ulimit [-aHS][-c <core文件上限>][-d <数据节区大小>][-f <文件大小>][-m <内存大小>][-n <文件数目>][-p <缓冲区大小>][-s <堆叠大小>][-t <CPU时间>][-u <程序数目>][-v <虚拟内存大小>]
    
    补充说明:ulimit为shell内建指令,可用来控制shell执行程序的资源。
    
    参  数:
       -a  显示目前资源限制的设定。 
       -c <core文件上限>  设定core文件的最大值,单位为区块。 
       -d <数据节区大小>  程序数据节区的最大值,单位为KB。 
       -f <文件大小>  shell所能建立的最大文件,单位为区块。 
       -H  设定资源的硬性限制,也就是管理员所设下的限制。 
       -m <内存大小>  指定可使用内存的上限,单位为KB。 
       -n <文件数目>  指定同一时间最多可开启的文件数。 
       -p <缓冲区大小>  指定管道缓冲区的大小,单位512字节。 
       -s <堆叠大小>  指定堆叠的上限,单位为KB。 
       -S  设定资源的弹性限制。 
       -t <CPU时间>  指定CPU使用时间的上限,单位为秒。 
       -u <程序数目>  用户最多可开启的程序数目。 
       -v <虚拟内存大小>  指定可使用的虚拟内存上限,单位为KB。*/
    
    // ulimint -a 用来显示当前的各种用户进程限制
    // 数据段长度:ulimit -d unlimited
    // 最大内存大小:ulimit -m unlimited
    // 堆栈大小:ulimit -s unlimited
    // ulimit -c unlimited   我们在用这个命令的时候主要是为了产生core文件,就是程序运行发行段错误时的文件
    View Code
  • 相关阅读:
    海盗分赃问题-----简化问题,分而治之
    计算机组成原理之输入输出系统
    计算机组成原理之外围设备
    计算机组成原理之总线系统
    计算机组成原理之控制器
    计算机组成原理之存储器
    计算机组成原理之运算器
    网络配置4:STP生成树协议配置
    微信内置浏览器私有接口WeixinJSBridge介绍(转)
    使用ajax和history.pushState无刷新改变页面URL(转)
  • 原文地址:https://www.cnblogs.com/vendanner/p/5002686.html
Copyright © 2020-2023  润新知