进程的proc文件系统信息

一、实验代码

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

void main()
{
    int fd;
    char buf = ‘1‘;

    char *pname = "/home/sfl/mytest/proc_test/abc/aaa.txt";

    fd = open(pname, O_RDWR);
    if (fd < 0) {
        printf("Open failed: %m");
        return;
    }

    while(1) {
        write(fd, &buf, 1); usleep(1000);
    }
}

二、测试

[email protected]:~/mytest/proc_test$ tree
.
├── abc
│ └── aaa.txt
├── pp
└── test.c

# gcc test.c -o pp
# ./pp
# ps -aux | grep pp
sfl 4626 93.0 0.0 2036 512 pts/0 R 08:34 0:07 ./pp

1.查看进程的路径:
[email protected]:/proc/4626$ ls cwd -l
lrwxrwxrwx 1 sfl sfl 0 Sep 27 08:34 cwd -> /home/sfl/mytest/proc_test

2.查看可执行程序路径名
[email protected]:/proc/4626$ ls exe -l
lrwxrwxrwx 1 sfl sfl 0 Sep 27 08:34 exe -> /home/sfl/mytest/proc_test/pp

3.查看进程运行环境
[email protected]:/proc/4626$ strings environ 可查看进程运行的环境,包括pwd和cmdline等信息

4.查看进程打开的文件描述符
[email protected]:/proc/4626$ ls fd -l 查看所有打开的文件的路径
total 0
lrwx------ 1 sfl sfl 64 Sep 27 08:36 0 -> /dev/pts/0 std_in
lrwx------ 1 sfl sfl 64 Sep 27 08:36 1 -> /dev/pts/0 std_out
lrwx------ 1 sfl sfl 64 Sep 27 08:34 2 -> /dev/pts/0 std_error
lrwx------ 1 sfl sfl 64 Sep 27 08:36 3 -> /home/sfl/mytest/proc_test/abc/aaa.txt

5.获取执行时的cmdline
[email protected]:/proc/4626# strings cmdline
./pp

6.查看io操作已经读写的字节数
[email protected]:/proc/4626# cat io
rchar: 1223
wchar: 57672
syscr: 7
syscw: 57672
read_bytes: 0
write_bytes: 73728

7.查看进程nice值
[email protected]:/proc/4626# cat autogroup
/autogroup-311 nice 0

8.comm应该是可执行文件名
[email protected]:/proc/4626# cat comm
pp

9.查看系统调用
[email protected]:/proc/4626# cat syscall
running
[email protected]:/proc/4626# cat syscall
162 0xbf9d71b8 0x0 0xb7762000 0x0 0x0 0xbf9d71f8 0xbf9d718c 0xb777ecf9

10.查看系统对此可执行程序的限制

[email protected]:/proc/4626# 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             48392                48392                processes
Max open files            1024                 4096                 files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       48392                48392                signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us  

11.查看文件系统的挂载信息 per-thread的!!

[email protected]:/proc/4626# cat mountinfo
18 23 0:17 / /sys rw,nosuid,nodev,noexec,relatime - sysfs sysfs rw
19 23 0:4 / /proc rw,nosuid,nodev,noexec,relatime - proc proc rw
20 23 0:6 / /dev rw,relatime - devtmpfs udev rw,size=3097160k,nr_inodes=204098,mode=755
21 20 0:14 / /dev/pts rw,nosuid,noexec,relatime - devpts devpts rw,gid=5,mode=620,ptmxmode=000
22 23 0:18 / /run rw,nosuid,noexec,relatime - tmpfs tmpfs rw,size=621552k,mode=755
23 0 8:1 / / rw,relatime - ext4 /dev/sda1 rw,errors=remount-ro,data=ordered
24 18 0:19 / /sys/fs/cgroup rw,relatime - tmpfs none rw,size=4k,mode=755
25 18 0:20 / /sys/fs/fuse/connections rw,relatime - fusectl none rw
26 18 0:7 / /sys/kernel/debug rw,relatime - debugfs none rw
27 18 0:12 / /sys/kernel/security rw,relatime - securityfs none rw
28 22 0:21 / /run/lock rw,nosuid,nodev,noexec,relatime - tmpfs none rw,size=5120k
29 22 0:22 / /run/shm rw,nosuid,nodev,relatime - tmpfs none rw
30 22 0:23 / /run/user rw,nosuid,nodev,noexec,relatime - tmpfs none rw,size=102400k,mode=755
31 18 0:24 / /sys/fs/pstore rw,relatime - pstore none rw
33 24 0:26 / /sys/fs/cgroup/systemd rw,nosuid,nodev,noexec,relatime - cgroup systemd rw,name=systemd
34 30 0:27 / /run/user/1000/gvfs rw,nosuid,nodev,relatime - fuse.gvfsd-fuse gvfsd-fuse rw,user_id=1000,group_id=1000

[email protected]:/proc/4626# 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,relatime,size=3097160k,nr_inodes=204098,mode=755 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /run tmpfs rw,nosuid,noexec,relatime,size=621552k,mode=755 0 0
/dev/sda1 / ext4 rw,relatime,errors=remount-ro,data=ordered 0 0
none /sys/fs/cgroup tmpfs rw,relatime,size=4k,mode=755 0 0
none /sys/fs/fuse/connections fusectl rw,relatime 0 0
none /sys/kernel/debug debugfs rw,relatime 0 0
none /sys/kernel/security securityfs rw,relatime 0 0
none /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k 0 0
none /run/shm tmpfs rw,nosuid,nodev,relatime 0 0
none /run/user tmpfs rw,nosuid,nodev,noexec,relatime,size=102400k,mode=755 0 0
none /sys/fs/pstore pstore rw,relatime 0 0
systemd /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,name=systemd 0 0
gvfsd-fuse /run/user/1000/gvfs fuse.gvfsd-fuse rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0

[email protected]:/proc/4626# 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/sda1 mounted on / with fstype ext4
device none mounted on /sys/fs/cgroup with fstype tmpfs
device none mounted on /sys/fs/fuse/connections with fstype fusectl
device none mounted on /sys/kernel/debug with fstype debugfs
device none mounted on /sys/kernel/security with fstype securityfs
device none mounted on /run/lock with fstype tmpfs
device none mounted on /run/shm with fstype tmpfs
device none mounted on /run/user with fstype tmpfs
device none mounted on /sys/fs/pstore with fstype pstore
device systemd mounted on /sys/fs/cgroup/systemd with fstype cgroup
device gvfsd-fuse mounted on /run/user/1000/gvfs with fstype fuse.gvfsd-fuse

12.查看进程状态信息

[email protected]:/proc/4626# cat status
Name:    pp
State:    S (sleeping)
Tgid:    4626
Ngid:    0
Pid:    4626
PPid:    3978
TracerPid:    0
Uid:    1000    1000    1000    1000
Gid:    1000    1000    1000    1000
FDSize:    256
Groups:    4 24 27 30 46 108 124 1000
NStgid:    4626
NSpid:    4626
NSpgid:    4626
NSsid:    3978
VmPeak:        2116 kB 最大虚拟内存峰值
VmSize:        2036 kB 虚拟内存
VmLck:           0 kB
VmPin:           0 kB
VmHWM:         544 kB
VmRSS:         544 kB
VmData:          40 kB
VmStk:         136 kB
VmExe:           4 kB
VmLib:        1824 kB
VmPTE:          16 kB
VmPMD:          12 kB
VmSwap:           0 kB
HugetlbPages:           0 kB
Threads:    1
SigQ:    0/48392
SigPnd:    0000000000000000
ShdPnd:    0000000000000000
SigBlk:    0000000000000000
SigIgn:    0000000000000000
SigCgt:    0000000000000000
CapInh:    0000000000000000
CapPrm:    0000000000000000
CapEff:    0000000000000000
CapBnd:    0000003fffffffff
CapAmb:    0000000000000000
Seccomp:    0
Cpus_allowed:    ff        允许运行的CPU掩码
Cpus_allowed_list:    0-7
Mems_allowed:    1
Mems_allowed_list:    0
voluntary_ctxt_switches:    296207
nonvoluntary_ctxt_switches:    26

13.查看可执行文件的内存映射

[email protected]:/proc/4626# cat maps
08048000-08049000 r-xp 00000000 08:01 1310779    /home/sfl/mytest/proc_test/pp    代码段
08049000-0804a000 r--p 00000000 08:01 1310779    /home/sfl/mytest/proc_test/pp  只读存储区
0804a000-0804b000 rw-p 00001000 08:01 1310779    /home/sfl/mytest/proc_test/pp  数据段
b75b6000-b75b7000 rw-p 00000000 00:00 0
b75b7000-b775f000 r-xp 00000000 08:01 787745     /lib/i386-linux-gnu/libc-2.19.so
b775f000-b7760000 ---p 001a8000 08:01 787745     /lib/i386-linux-gnu/libc-2.19.so
b7760000-b7762000 r--p 001a8000 08:01 787745     /lib/i386-linux-gnu/libc-2.19.so
b7762000-b7763000 rw-p 001aa000 08:01 787745     /lib/i386-linux-gnu/libc-2.19.so
b7763000-b7766000 rw-p 00000000 00:00 0
b777a000-b777c000 rw-p 00000000 00:00 0
b777c000-b777e000 r--p 00000000 00:00 0          [vvar]
b777e000-b7780000 r-xp 00000000 00:00 0          [vdso]
b7780000-b77a0000 r-xp 00000000 08:01 787721     /lib/i386-linux-gnu/ld-2.19.so
b77a0000-b77a1000 r--p 0001f000 08:01 787721     /lib/i386-linux-gnu/ld-2.19.so
b77a1000-b77a2000 rw-p 00020000 08:01 787721     /lib/i386-linux-gnu/ld-2.19.so
bf9b8000-bf9d9000 rw-p 00000000 00:00 0          [stack]

14.task/4626/目录下面又有一层一样的东西

[email protected]:/proc/4626# ls task/4626/
attr      clear_refs  cwd      fdinfo   loginuid   mounts   oom_score      projid_map  sessionid  stat     uid_map
auxv      cmdline     environ  gid_map  maps       net      oom_score_adj  root        setgroups  statm    wchan
cgroup    comm        exe      io       mem        ns       pagemap        sched       smaps      status
children  cpuset      fd       limits   mountinfo  oom_adj  personality    schedstat   stack      syscall

15.net目录下又有这么多文件

[email protected]:/proc/4626# ls net/
anycast6   dev_mcast     icmp      ip6_flowlabel  ipv6_route  netlink    ptype   rt6_stats  snmp6         tcp      udplite6
arp        dev_snmp6     icmp6     ip6_mr_cache   l2cap       netstat    raw     rt_acct    sockstat      tcp6     unix
bnep       fib_trie      if_inet6  ip6_mr_vif     mcfilter    packet     raw6    rt_cache   sockstat6     udp      wireless
connector  fib_triestat  igmp      ip_mr_cache    mcfilter6   protocols  rfcomm  sco        softnet_stat  udp6     xfrm_stat
dev        hci           igmp6     ip_mr_vif      netfilter   psched     route   snmp       stat          udplite

原文地址:https://www.cnblogs.com/hellokitty2/p/9716396.html

时间: 2024-10-23 00:05:43

进程的proc文件系统信息的相关文章

/proc文件系统的特点和/proc文件的说明

/proc文件系统是一种特殊的.由软件创建的文件系统,内核使用它向外界导出信息,/proc系统只存在内存当中,而不占用外存空间. /proc下面的每个文件都绑定于一个内核函数,用户读取文件时,该函数动态地生成文件的内容.也可以通过写/proc文件修改内核参数 /proc目录下的文件分析  /proc/$pid 关于进程$pid的信息目录.每个进程在/proc 下有一个名为其进程号的目录.例:$>strings -f /proc/[0-9]*/cmdline /proc/cmdline  内核启动

内核模块遍历进程和任务队列保存到proc文件中

实现一个模块用它遍历当前进程的父进程和任务队列,并将遍历的结果输出到一个proc 文件中(遍历可以从 current 当前进程开始,父进程遍历到初始化进程,遍历任务队列可以利用 for_each_process 宏). 下面是我的内核模块的实现部分: /************************************************************ * 使用内核模块从当前进程开始先前遍历,知道找到第一个进程为止 * * 并将遍历的结果保存到proc文件中 * ******

《Linux/Unix系统编程手册》读书笔记7 (/proc文件的简介和运用)

<Linux/Unix系统编程手册>读书笔记 目录 第11章 这章主要讲了关于Linux和UNIX的系统资源的限制. 关于限制都存在一个最小值,这些最小值为<limits.h>文件中的常量. 通过cat 命令查看: [email protected]:~/Code/tlpi$ cat /usr/include/limits.h /* Copyright (C) 1991, 1992, 1996, 1997, 1998, 1999, 2000, 2005 Free Software

Linux 根据进程ID查看文件路径(转)

遇到的问题是想要查看进程的启动脚本在哪里,比如自己写的weblogic启动脚本,但忘记放在哪里了,这时候可以用以下方式 1.用ps -ef |grep xxxxx 得到该进程的pid 2.输入ls -l ,结果中 exe链接对应的就是可执行文件的路径$ ls -l /proc/18283 dr-xr-xr-x 2 root root 0 Jan 21 10:39 attr -r-------- 1 root root 0 Jan 21 10:39 auxv -r--r--r-- 1 root r

Linux 小知识翻译 - 「/proc 文件夹」

这次聊聊 「/proc 文件夹」. /proc 文件夹用来保管系统状态相关的文件的特殊文件夹,这个文件夹中有的文件只是内存上的虚拟文件. /proc 文件夹下有些文件可以反映各个进程的运行状态.所以说是决定Linux运行的非常重要的文件夹. 通过这个文件夹下文件,可以获取各式各样的信息.比如,请在命令行下输入「cat /proc/cpuinfo」试试看.可以获得CPU的信息. 其它还可以获得内存信息,驱动信息,以及其它软硬件方面的各种信息. 因此,修改 /proc 文件夹下的文件,可以调整系统的

转 proc文件

/proc 是一个伪文件系统, 被用作内核数据结构的接口, 而不仅仅是解释说明/dev/kmem. /proc 里的大多数文件都是只读的, 但也可以通过写一些文件来改变内核变量. 下面对整个 /proc 目录作一个大略的介绍. [number]在 /proc 目录里, 每个正在运行的进程都有一个以该进程 ID 命名的子目录, 其下包括如下的目录和伪文件: [number] /cmdline该文件保存了进程的完整命令行. 如果该进程已经被交换出内存, 或者该进程已经僵死, 那么就没有任何东西在该文

lsof恢复进程打开的文件

工作原理:进程每打开文件都会生成一个文件句柄FD来标识一个文件,进程打开的文件如果没有被释放,可以通过文件句柄FD来恢复删除的文件 注意:适合恢复进程一直在打开一个文件,例如日志文件,如果配置文件进程启动的时候读取马上释放掉该文件的句柄通过这种方式是恢复不了的:同时如果打开的文件被删除掉,同时把服务重启了,服务被重启这个文件句柄也会被释放掉,通过lsof方式也是无法恢复的: 安装:yum install lsof -y 查看打开/var/log/messages文件的进程 这里打开/var/lo

【讲清楚,说明白!】干货--使用lsof恢复进程打开的文件

目录:(一)lsof恢复文件(二)lsof的其他用法 (一)lsof恢复文件(1.1)如果在系统中有某个进程打开了一个文件,但是这个文件被我们误删除,此时我们希望将误删除的文件恢复.如果某个被误删除的文件所对应的进程没有关,这个文件就可以恢复.(1.2)在Linux中的FD文件描述符与windows中的文件句柄是同样的一个概念,一个进程打开一个文件就会产生相应的文件描述符,如果这个进程将文件关闭了,那么这个文件描述符或文件句柄就会跟着释放掉了.(1.3)我们直接执行lsof命令,可以看到如下的信

LINUX实现父子进程轮流修改文件的值

本例子是基于信号的同步机制实现父子进程轮流修改文件中的值. tatic volatile sig_atomic_t sigflag; static sigset_t newmask,oldmask,zeromask; static void sig_usr(int signo) { sigflag=1; } void TELL_WAIT(void) { if(signal(SIGUSR1,sig_usr)==SIG_ERR) perror("signal error"); if(sig