文档章节

/proc/<pid>/stat各个字段的描述

吃一堑消化不良
 吃一堑消化不良
发布于 2016/03/28 09:52
字数 590
阅读 177
收藏 0
typedef struct statstruct_proc {
  int           pid;                      /** 进程 id. **/
  char          exName [_POSIX_PATH_MAX]; /** 可执行文件名**/
  char          state; /** 1 **/          /** R 代表正在运行, S 代表正在休眠, D 代表正处于不可中断的等待状态下的休眠,Z 代表进程未响应, T 代表进程已停止**/
  unsigned      euid,                      /** 有效的用户 id **/
                egid;                      /** 有效的组 id */     
  int           ppid;                     /** 父进程的 pid. **/
  int           pgrp;                     /** The pgrp of the process. **/
  int           session;                  /** 该进程的 session **/
  int           tty;                      /** The tty the process uses **/
  int           tpgid;                    /** (too long) **/
  unsigned intflags;                    /** The flags of the process. **/
  unsigned intminflt;                   /** The number of minor faults **/
  unsigned intcminflt;                  /** The number of minor faults with childs **/
  unsigned intmajflt;                   /** The number of major faults **/
  unsigned int  cmajflt;                  /** The number of major faults with childs **/
  int           utime;                    /** user mode jiffies **/
  int           stime;                    /** kernel mode jiffies **/
  intcutime;                   /** user mode jiffies with childs **/
  int           cstime;                   /** kernel mode jiffies with childs **/
  int           counter;                  /** process's next timeslice **/
  int           priority;                 /** the standard nice value, plus fifteen **/
  unsigned int  timeout;                  /** The time in jiffies of the next timeout **/
  unsigned int  itrealvalue;              /** The time before the next SIGALRM is sent to the process **/
  int           starttime; /** 20 **/     /** Time the process started after system boot **/
  unsigned int  vsize;                    /** Virtual memory size **/
  unsigned int  rss;                      /** Resident Set Size **/
  unsigned int  rlim;                     /** Current limit in bytes on the rss **/
  unsigned int  startcode;                /** The address above which program text can run **/
  unsigned intendcode;                  /** The address below which program text can run **/
  unsigned int  startstack;               /** The address of the start of the stack **/
  unsigned int  kstkesp;                  /** The current value of ESP **/
  unsigned int  kstkeip;                 /** The current value of EIP **/
  intsignal;                   /** The bitmap of pending signals **/
  int           blocked; /** 30 **/       /** The bitmap of blocked signals **/
  int           sigignore;                /** The bitmap of ignored signals **/
  int           sigcatch;                 /** The bitmap of catched signals **/
  unsigned int  wchan;  /** 33 **/        /** (too long) **/
  intsched,   /** scheduler **/
                sched_priority;  /** scheduler priority **/

} procinfo;
int get_proc_info(pid_t pid, procinfo * pinfo)
{
  char szFileName [_POSIX_PATH_MAX],
    szStatStr [2048],
    *s, *t;
  FILE *fp;
  struct stat st;
  
  if (NULL == pinfo) {
    errno = EINVAL;
    return -1;
  }

  sprintf (szFileName, "/proc/%u/stat", (unsigned) pid);
  
  if (-1 == access (szFileName, R_OK)) {
    return (pinfo->pid = -1);
  } /** if **/

  if (-1 != stat (szFileName, &st)) {
  pinfo->euid = st.st_uid;
  pinfo->egid = st.st_gid;
  } else {
  pinfo->euid = pinfo->egid = -1;
  }
  
  
  if ((fp = fopen (szFileName, "r")) == NULL) {
    return (pinfo->pid = -1);
  } /** IF_NULL **/
  
  if ((s = fgets (szStatStr, 2048, fp)) == NULL) {
    fclose (fp);
    return (pinfo->pid = -1);
  }

  /** pid **/
  sscanf (szStatStr, "%u", &(pinfo->pid));
  s = strchr (szStatStr, '(') + 1;
  t = strchr (szStatStr, ')');
  strncpy (pinfo->exName, s, t - s);
  pinfo->exName [t - s] = '';
  
  sscanf (t + 2, "%c %d %d %d %d %d %u %u %u %u %u %d %d %d %d %d %d %u %u %d %u %u %u %u %u %u %u %u %d %d %d %d %u",
  /*       1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33*/
  &(pinfo->state),
  &(pinfo->ppid),
  &(pinfo->pgrp),
  &(pinfo->session),
  &(pinfo->tty),
  &(pinfo->tpgid),
  &(pinfo->flags),
  &(pinfo->minflt),
  &(pinfo->cminflt),
  &(pinfo->majflt),
  &(pinfo->cmajflt),
  &(pinfo->utime),
  &(pinfo->stime),
  &(pinfo->cutime),
  &(pinfo->cstime),
  &(pinfo->counter),
  &(pinfo->priority),
  &(pinfo->timeout),
  &(pinfo->itrealvalue),
  &(pinfo->starttime),
  &(pinfo->vsize),
  &(pinfo->rss),
  &(pinfo->rlim),
  &(pinfo->startcode),
  &(pinfo->endcode),
  &(pinfo->startstack),
  &(pinfo->kstkesp),
  &(pinfo->kstkeip),
  &(pinfo->signal),
  &(pinfo->blocked),
  &(pinfo->sigignore),
  &(pinfo->sigcatch),
  &(pinfo->wchan));
  fclose (fp);
  return 0;
}







© 著作权归作者所有

吃一堑消化不良
粉丝 28
博文 188
码字总数 113563
作品 0
浦东
程序员
私信 提问
Android基础性能数据获取(api或/proc/读取)

主要资料参考 Android系统源码在线查看网址 Linux平台Cpu使用率的计算 腾讯开源移动端性能测试APP:GT 3.1 内存篇 内存:表示当前进程内存的使用情况,内存占用过高可能会引起内存抖动,或O...

某杰
2018/05/07
0
0
【linux】 /proc/PID/stat

//proc/9744$ cat status Name: gedit /进程的程序名/ State: S (sleeping) /进程的状态信息,具体参见http://blog.chinaunix.net/u2/73528/showart_1106510.html/ Tgid: 9744 /线程组号/ Pid......

SibylY
2016/08/04
49
0
linux的进程树

linux的树形进程结构为管理进程提供了很大的方便,不管是内核对进程的管理还是用户对进程的管理都受惠不少,对于审计也是很有用的,不管运行的什么进程,都会有一条不会断的线索将之绑在系统...

晨曦之光
2012/04/10
1K
0
查看Linux进程信息

可以直接使用top命令后,查看%MEM的内容。可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令:  (1)top   top命令是Linux下常用的性能分析...

SibylY
2016/05/23
73
0
Linux系统下/proc/[pid] 目录各文件简析

Linux 内核提供了一种通过 proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc 文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为...

English0523
2017/12/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
34分钟前
2
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
今天
1
0
前端——使用base64编码在页面嵌入图片

因为页面中插入一个图片都要写明图片的路径——相对路径或者绝对路径。而除了具体的网站图片的图片地址,如果是在自己电脑文件夹里的图片,当我们的HTML文件在别人电脑上打开的时候图片则由于...

被毒打的程序猿
今天
2
0
Flutter 系列之Dart语言概述

Dart语言与其他语言究竟有什么不同呢?在已有的编程语言经验的基础上,我们该如何快速上手呢?本篇文章从编程语言中最重要的组成部分,也就是基础语法与类型变量出发,一起来学习Dart吧 一、...

過愙
今天
2
0
rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部